From b815d70d548ca74d68e4b7f07abd2049dda1657d Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 25 Oct 2025 19:36:34 +0300 Subject: [PATCH] Features: 1) Migrate from gunicorn to uvicorn. 2) Add skeleton for chat functionality; Fixes: None; Extra: Add missing translations; --- blog/locale/ar_AR/LC_MESSAGES/django.mo | Bin 1524 -> 2736 bytes blog/locale/ar_AR/LC_MESSAGES/django.po | 52 +- blog/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 1394 -> 2403 bytes blog/locale/cs_CZ/LC_MESSAGES/django.po | 53 +- blog/locale/da_DK/LC_MESSAGES/django.mo | Bin 1306 -> 2338 bytes blog/locale/da_DK/LC_MESSAGES/django.po | 53 +- blog/locale/de_DE/LC_MESSAGES/django.mo | Bin 1364 -> 2430 bytes blog/locale/de_DE/LC_MESSAGES/django.po | 55 +- blog/locale/en_GB/LC_MESSAGES/django.mo | Bin 1270 -> 2252 bytes blog/locale/en_GB/LC_MESSAGES/django.po | 52 +- blog/locale/en_US/LC_MESSAGES/django.mo | Bin 1275 -> 2257 bytes blog/locale/en_US/LC_MESSAGES/django.po | 52 +- blog/locale/es_ES/LC_MESSAGES/django.mo | Bin 1356 -> 2410 bytes blog/locale/es_ES/LC_MESSAGES/django.po | 54 +- blog/locale/fa_IR/LC_MESSAGES/django.po | 44 +- blog/locale/fr_FR/LC_MESSAGES/django.mo | Bin 1343 -> 2453 bytes blog/locale/fr_FR/LC_MESSAGES/django.po | 59 +- blog/locale/he_IL/LC_MESSAGES/django.mo | Bin 1422 -> 2561 bytes blog/locale/he_IL/LC_MESSAGES/django.po | 50 +- blog/locale/hi_IN/LC_MESSAGES/django.po | 44 +- blog/locale/hr_HR/LC_MESSAGES/django.po | 44 +- blog/locale/id_ID/LC_MESSAGES/django.mo | Bin 1328 -> 2353 bytes blog/locale/id_ID/LC_MESSAGES/django.po | 58 +- blog/locale/it_IT/LC_MESSAGES/django.mo | Bin 1293 -> 2352 bytes blog/locale/it_IT/LC_MESSAGES/django.po | 54 +- blog/locale/ja_JP/LC_MESSAGES/django.mo | Bin 1447 -> 2564 bytes blog/locale/ja_JP/LC_MESSAGES/django.po | 56 +- blog/locale/kk_KZ/LC_MESSAGES/django.po | 44 +- blog/locale/ko_KR/LC_MESSAGES/django.mo | Bin 1377 -> 2476 bytes blog/locale/ko_KR/LC_MESSAGES/django.po | 52 +- blog/locale/nl_NL/LC_MESSAGES/django.mo | Bin 1321 -> 2351 bytes blog/locale/nl_NL/LC_MESSAGES/django.po | 58 +- blog/locale/no_NO/LC_MESSAGES/django.mo | Bin 1300 -> 2331 bytes blog/locale/no_NO/LC_MESSAGES/django.po | 53 +- blog/locale/pl_PL/LC_MESSAGES/django.mo | Bin 1324 -> 2339 bytes blog/locale/pl_PL/LC_MESSAGES/django.po | 54 +- blog/locale/pt_BR/LC_MESSAGES/django.mo | Bin 1372 -> 2412 bytes blog/locale/pt_BR/LC_MESSAGES/django.po | 57 +- blog/locale/ro_RO/LC_MESSAGES/django.mo | Bin 1357 -> 2411 bytes blog/locale/ro_RO/LC_MESSAGES/django.po | 57 +- blog/locale/ru_RU/LC_MESSAGES/django.mo | Bin 1665 -> 3078 bytes blog/locale/ru_RU/LC_MESSAGES/django.po | 53 +- blog/locale/sv_SE/LC_MESSAGES/django.mo | Bin 1324 -> 2355 bytes blog/locale/sv_SE/LC_MESSAGES/django.po | 53 +- blog/locale/th_TH/LC_MESSAGES/django.mo | Bin 1871 -> 3556 bytes blog/locale/th_TH/LC_MESSAGES/django.po | 57 +- blog/locale/tr_TR/LC_MESSAGES/django.mo | Bin 1365 -> 2405 bytes blog/locale/tr_TR/LC_MESSAGES/django.po | 57 +- blog/locale/vi_VN/LC_MESSAGES/django.mo | Bin 1436 -> 2547 bytes blog/locale/vi_VN/LC_MESSAGES/django.po | 53 +- blog/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 1271 -> 2197 bytes blog/locale/zh_Hans/LC_MESSAGES/django.po | 47 +- core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 98180 -> 98530 bytes core/locale/ar_AR/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 83821 -> 84133 bytes core/locale/cs_CZ/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/da_DK/LC_MESSAGES/django.mo | Bin 82146 -> 82461 bytes core/locale/da_DK/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/de_DE/LC_MESSAGES/django.mo | Bin 86914 -> 87238 bytes core/locale/de_DE/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/en_GB/LC_MESSAGES/django.mo | Bin 79251 -> 79562 bytes core/locale/en_GB/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/en_US/LC_MESSAGES/django.mo | Bin 79242 -> 79553 bytes core/locale/en_US/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/es_ES/LC_MESSAGES/django.mo | Bin 85053 -> 85390 bytes core/locale/es_ES/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/fa_IR/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 87659 -> 87999 bytes core/locale/fr_FR/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/he_IL/LC_MESSAGES/django.mo | Bin 91025 -> 91378 bytes core/locale/he_IL/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/hi_IN/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/hr_HR/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/id_ID/LC_MESSAGES/django.mo | Bin 82150 -> 82446 bytes core/locale/id_ID/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/it_IT/LC_MESSAGES/django.mo | Bin 85192 -> 85531 bytes core/locale/it_IT/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 90105 -> 90427 bytes core/locale/ja_JP/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/kk_KZ/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 85212 -> 85546 bytes core/locale/ko_KR/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 84786 -> 85103 bytes core/locale/nl_NL/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/no_NO/LC_MESSAGES/django.mo | Bin 82710 -> 83017 bytes core/locale/no_NO/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 84179 -> 84489 bytes core/locale/pl_PL/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 84715 -> 85043 bytes core/locale/pt_BR/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 86410 -> 86733 bytes core/locale/ro_RO/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 111912 -> 112293 bytes core/locale/ru_RU/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 82801 -> 83129 bytes core/locale/sv_SE/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/th_TH/LC_MESSAGES/django.mo | Bin 133416 -> 133901 bytes core/locale/th_TH/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 84849 -> 85170 bytes core/locale/tr_TR/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 95068 -> 95447 bytes core/locale/vi_VN/LC_MESSAGES/django.po | 702 +++++++++--------- core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 74369 -> 74663 bytes core/locale/zh_Hans/LC_MESSAGES/django.po | 702 +++++++++--------- evibes/asgi.py | 27 +- evibes/locale/ar_AR/LC_MESSAGES/django.mo | Bin 3414 -> 3887 bytes evibes/locale/ar_AR/LC_MESSAGES/django.po | 26 +- evibes/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 2893 -> 3255 bytes evibes/locale/cs_CZ/LC_MESSAGES/django.po | 26 +- evibes/locale/da_DK/LC_MESSAGES/django.mo | Bin 2859 -> 3217 bytes evibes/locale/da_DK/LC_MESSAGES/django.po | 26 +- evibes/locale/de_DE/LC_MESSAGES/django.mo | Bin 2864 -> 3251 bytes evibes/locale/de_DE/LC_MESSAGES/django.po | 27 +- evibes/locale/en_GB/LC_MESSAGES/django.mo | Bin 2745 -> 3099 bytes evibes/locale/en_GB/LC_MESSAGES/django.po | 26 +- evibes/locale/en_US/LC_MESSAGES/django.mo | Bin 2750 -> 3104 bytes evibes/locale/en_US/LC_MESSAGES/django.po | 26 +- evibes/locale/es_ES/LC_MESSAGES/django.mo | Bin 2955 -> 3341 bytes evibes/locale/es_ES/LC_MESSAGES/django.po | 26 +- evibes/locale/fa_IR/LC_MESSAGES/django.po | 28 +- evibes/locale/fr_FR/LC_MESSAGES/django.mo | Bin 2999 -> 3430 bytes evibes/locale/fr_FR/LC_MESSAGES/django.po | 30 +- evibes/locale/he_IL/LC_MESSAGES/django.mo | Bin 3105 -> 3540 bytes evibes/locale/he_IL/LC_MESSAGES/django.po | 26 +- evibes/locale/hi_IN/LC_MESSAGES/django.po | 28 +- evibes/locale/hr_HR/LC_MESSAGES/django.po | 28 +- evibes/locale/id_ID/LC_MESSAGES/django.mo | Bin 2751 -> 3124 bytes evibes/locale/id_ID/LC_MESSAGES/django.po | 26 +- evibes/locale/it_IT/LC_MESSAGES/django.mo | Bin 2937 -> 3322 bytes evibes/locale/it_IT/LC_MESSAGES/django.po | 26 +- evibes/locale/ja_JP/LC_MESSAGES/django.mo | Bin 3045 -> 3438 bytes evibes/locale/ja_JP/LC_MESSAGES/django.po | 26 +- evibes/locale/kk_KZ/LC_MESSAGES/django.po | 28 +- evibes/locale/ko_KR/LC_MESSAGES/django.mo | Bin 2838 -> 3191 bytes evibes/locale/ko_KR/LC_MESSAGES/django.po | 26 +- evibes/locale/nl_NL/LC_MESSAGES/django.mo | Bin 2853 -> 3228 bytes evibes/locale/nl_NL/LC_MESSAGES/django.po | 26 +- evibes/locale/no_NO/LC_MESSAGES/django.mo | Bin 2863 -> 3228 bytes evibes/locale/no_NO/LC_MESSAGES/django.po | 26 +- evibes/locale/pl_PL/LC_MESSAGES/django.mo | Bin 2887 -> 3272 bytes evibes/locale/pl_PL/LC_MESSAGES/django.po | 26 +- evibes/locale/pt_BR/LC_MESSAGES/django.mo | Bin 2917 -> 3298 bytes evibes/locale/pt_BR/LC_MESSAGES/django.po | 26 +- evibes/locale/ro_RO/LC_MESSAGES/django.mo | Bin 2946 -> 3320 bytes evibes/locale/ro_RO/LC_MESSAGES/django.po | 26 +- evibes/locale/ru_RU/LC_MESSAGES/django.mo | Bin 3509 -> 4040 bytes evibes/locale/ru_RU/LC_MESSAGES/django.po | 26 +- evibes/locale/sv_SE/LC_MESSAGES/django.mo | Bin 2871 -> 3254 bytes evibes/locale/sv_SE/LC_MESSAGES/django.po | 26 +- evibes/locale/th_TH/LC_MESSAGES/django.mo | Bin 4008 -> 4584 bytes evibes/locale/th_TH/LC_MESSAGES/django.po | 26 +- evibes/locale/tr_TR/LC_MESSAGES/django.mo | Bin 2924 -> 3322 bytes evibes/locale/tr_TR/LC_MESSAGES/django.po | 27 +- evibes/locale/vi_VN/LC_MESSAGES/django.mo | Bin 3137 -> 3577 bytes evibes/locale/vi_VN/LC_MESSAGES/django.po | 28 +- evibes/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 2694 -> 3037 bytes evibes/locale/zh_Hans/LC_MESSAGES/django.po | 26 +- evibes/settings/base.py | 10 + evibes/settings/constance.py | 8 + evibes/settings/logconfig.py | 4 +- nginx.conf | 5 + payments/locale/ar_AR/LC_MESSAGES/django.mo | Bin 3498 -> 4945 bytes payments/locale/ar_AR/LC_MESSAGES/django.po | 89 ++- payments/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 3134 -> 4352 bytes payments/locale/cs_CZ/LC_MESSAGES/django.po | 89 ++- payments/locale/da_DK/LC_MESSAGES/django.mo | Bin 3112 -> 4335 bytes payments/locale/da_DK/LC_MESSAGES/django.po | 90 ++- payments/locale/de_DE/LC_MESSAGES/django.mo | Bin 3232 -> 4493 bytes payments/locale/de_DE/LC_MESSAGES/django.po | 101 ++- payments/locale/en_GB/LC_MESSAGES/django.mo | Bin 3041 -> 4222 bytes payments/locale/en_GB/LC_MESSAGES/django.po | 89 ++- payments/locale/en_US/LC_MESSAGES/django.mo | Bin 3029 -> 4210 bytes payments/locale/en_US/LC_MESSAGES/django.po | 89 ++- payments/locale/es_ES/LC_MESSAGES/django.mo | Bin 3165 -> 4465 bytes payments/locale/es_ES/LC_MESSAGES/django.po | 100 ++- payments/locale/fa_IR/LC_MESSAGES/django.po | 83 ++- payments/locale/fr_FR/LC_MESSAGES/django.mo | Bin 3241 -> 4551 bytes payments/locale/fr_FR/LC_MESSAGES/django.po | 100 ++- payments/locale/he_IL/LC_MESSAGES/django.mo | Bin 3298 -> 4689 bytes payments/locale/he_IL/LC_MESSAGES/django.po | 93 ++- payments/locale/hi_IN/LC_MESSAGES/django.po | 83 ++- payments/locale/hr_HR/LC_MESSAGES/django.po | 83 ++- payments/locale/id_ID/LC_MESSAGES/django.mo | Bin 3167 -> 4372 bytes payments/locale/id_ID/LC_MESSAGES/django.po | 96 ++- payments/locale/it_IT/LC_MESSAGES/django.mo | Bin 3154 -> 4458 bytes payments/locale/it_IT/LC_MESSAGES/django.po | 100 ++- payments/locale/ja_JP/LC_MESSAGES/django.mo | Bin 3380 -> 4631 bytes payments/locale/ja_JP/LC_MESSAGES/django.po | 96 ++- payments/locale/kk_KZ/LC_MESSAGES/django.po | 83 ++- payments/locale/ko_KR/LC_MESSAGES/django.mo | Bin 3197 -> 4488 bytes payments/locale/ko_KR/LC_MESSAGES/django.po | 97 ++- payments/locale/nl_NL/LC_MESSAGES/django.mo | Bin 3136 -> 4363 bytes payments/locale/nl_NL/LC_MESSAGES/django.po | 91 ++- payments/locale/no_NO/LC_MESSAGES/django.mo | Bin 3097 -> 4302 bytes payments/locale/no_NO/LC_MESSAGES/django.po | 93 ++- payments/locale/pl_PL/LC_MESSAGES/django.mo | Bin 3167 -> 4383 bytes payments/locale/pl_PL/LC_MESSAGES/django.po | 96 ++- payments/locale/pt_BR/LC_MESSAGES/django.mo | Bin 3155 -> 4427 bytes payments/locale/pt_BR/LC_MESSAGES/django.po | 92 ++- payments/locale/ro_RO/LC_MESSAGES/django.mo | Bin 3169 -> 4428 bytes payments/locale/ro_RO/LC_MESSAGES/django.po | 89 ++- payments/locale/ru_RU/LC_MESSAGES/django.mo | Bin 3823 -> 5396 bytes payments/locale/ru_RU/LC_MESSAGES/django.po | 95 ++- payments/locale/sv_SE/LC_MESSAGES/django.mo | Bin 3154 -> 4386 bytes payments/locale/sv_SE/LC_MESSAGES/django.po | 91 ++- payments/locale/th_TH/LC_MESSAGES/django.mo | Bin 4390 -> 6368 bytes payments/locale/th_TH/LC_MESSAGES/django.po | 96 ++- payments/locale/tr_TR/LC_MESSAGES/django.mo | Bin 3121 -> 4383 bytes payments/locale/tr_TR/LC_MESSAGES/django.po | 95 ++- payments/locale/vi_VN/LC_MESSAGES/django.mo | Bin 3378 -> 4811 bytes payments/locale/vi_VN/LC_MESSAGES/django.po | 97 ++- payments/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 2923 -> 4011 bytes payments/locale/zh_Hans/LC_MESSAGES/django.po | 94 ++- pyproject.toml | 9 +- scripts/Docker/app-entrypoint.sh | 14 +- uv.lock | 470 +++++++++--- vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo | Bin 14599 -> 16016 bytes vibes_auth/locale/ar_AR/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 12106 -> 13260 bytes vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/da_DK/LC_MESSAGES/django.mo | Bin 11933 -> 13039 bytes vibes_auth/locale/da_DK/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/de_DE/LC_MESSAGES/django.mo | Bin 12771 -> 13986 bytes vibes_auth/locale/de_DE/LC_MESSAGES/django.po | 127 +++- vibes_auth/locale/en_GB/LC_MESSAGES/django.mo | Bin 11489 -> 12581 bytes vibes_auth/locale/en_GB/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/en_US/LC_MESSAGES/django.mo | Bin 11478 -> 12570 bytes vibes_auth/locale/en_US/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/es_ES/LC_MESSAGES/django.mo | Bin 12549 -> 13742 bytes vibes_auth/locale/es_ES/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/fa_IR/LC_MESSAGES/django.po | 126 +++- vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo | Bin 13113 -> 14390 bytes vibes_auth/locale/fr_FR/LC_MESSAGES/django.po | 127 +++- vibes_auth/locale/he_IL/LC_MESSAGES/django.mo | Bin 13068 -> 14382 bytes vibes_auth/locale/he_IL/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/hi_IN/LC_MESSAGES/django.po | 126 +++- vibes_auth/locale/hr_HR/LC_MESSAGES/django.po | 126 +++- vibes_auth/locale/id_ID/LC_MESSAGES/django.mo | Bin 11973 -> 13104 bytes vibes_auth/locale/id_ID/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/it_IT/LC_MESSAGES/django.mo | Bin 12465 -> 13684 bytes vibes_auth/locale/it_IT/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo | Bin 13794 -> 15136 bytes vibes_auth/locale/ja_JP/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po | 126 +++- vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo | Bin 12661 -> 13876 bytes vibes_auth/locale/ko_KR/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo | Bin 12211 -> 13392 bytes vibes_auth/locale/nl_NL/LC_MESSAGES/django.po | 125 +++- vibes_auth/locale/no_NO/LC_MESSAGES/django.mo | Bin 11977 -> 13077 bytes vibes_auth/locale/no_NO/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo | Bin 12328 -> 13526 bytes vibes_auth/locale/pl_PL/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo | Bin 12282 -> 13469 bytes vibes_auth/locale/pt_BR/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo | Bin 12681 -> 13867 bytes vibes_auth/locale/ro_RO/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo | Bin 16270 -> 17808 bytes vibes_auth/locale/ru_RU/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo | Bin 12163 -> 13307 bytes vibes_auth/locale/sv_SE/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/th_TH/LC_MESSAGES/django.mo | Bin 18574 -> 20428 bytes vibes_auth/locale/th_TH/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo | Bin 12460 -> 13616 bytes vibes_auth/locale/tr_TR/LC_MESSAGES/django.po | 124 +++- vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo | Bin 13361 -> 14781 bytes vibes_auth/locale/vi_VN/LC_MESSAGES/django.po | 127 +++- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 10975 -> 12057 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 124 +++- vibes_auth/messaging/__init__.py | 0 vibes_auth/messaging/admin.py | 51 ++ vibes_auth/messaging/auth.py | 48 ++ vibes_auth/messaging/consumers.py | 50 ++ vibes_auth/messaging/models.py | 75 ++ vibes_auth/messaging/routing.py | 9 + vibes_auth/messaging/services.py | 168 +++++ 275 files changed, 17366 insertions(+), 11537 deletions(-) create mode 100644 vibes_auth/messaging/__init__.py create mode 100644 vibes_auth/messaging/admin.py create mode 100644 vibes_auth/messaging/auth.py create mode 100644 vibes_auth/messaging/consumers.py create mode 100644 vibes_auth/messaging/models.py create mode 100644 vibes_auth/messaging/routing.py create mode 100644 vibes_auth/messaging/services.py diff --git a/blog/locale/ar_AR/LC_MESSAGES/django.mo b/blog/locale/ar_AR/LC_MESSAGES/django.mo index 5b6bd2f23feff90c0955b6124950a29bf6aa127f..6e572495ab31d45c2f4ffa01729c72fd14c6c30f 100644 GIT binary patch literal 2736 zcmah~+iw(A7#|UD^@b#PiAp}=10{C0TL=Ues?t(OO>dSh3F-rnkGYC zCFRv(UyDG7vGQkZWx`h>Lf7kI#QMcLtO@Ovh)1~S4l3}{j)5XFFnv*qR-K{XM5 zUJfq@X<87-7MfB}Er#@ylIl@7?UfP2#gdMN@6V9D0#%haEgkNfgDPdjqCpOVZJ@m= z5B0IooYi&}dyWS&v}IWr70FXw#YdzTwlBmxbQuD*Oee;Ns8i-DIl9zcm43Y&rvs^@ znM;S>cQV@CFGRwTV9}bofc1>jU>+;^c!eHXBt_X_diKNovw>=k_<-1_2igVoppO3ZO1Z_EI>>5yMR!9uFE~l1s)&@-y%WW= z?(w!AbDn~L13@V)+7n)TNHeY0vd zlQ~{kL!cE5;JyXlF4T2}HW#pe z$25@P8Wu3wOlFg-O-9zwdaatfFj}z$S6ZRAKy$_N&0^2PI?c^)91g73%)_*%C9|3% zxXfbtfz4rl0UdC=iq&NZblt3Sp)93&2)1ive&T?<*rI8EOqO|`GDXE{b$~gpY92JV z2xI25lseBQAdN)Wu)LO&tEK@eb9Ng67ZY&fzHC6C1x||Iq1qoHW>zH>n1|!4xrr2M zlh`D=PH>usfE>Fma1O`9+~yKkUQobEXtG73O$=Ae&xGW*nyk9^7RcQN=Lh&5!LR{J zt2PXp=h!l`BjsR!8zH}emQ50AC(^Tps?b1I2J$dh*eq}bwntnl#NTw1B^aP1vyd8_ zx8Sq}rt7?cqrHS<&5dZ;bF9o5TR3p-;)#DfTOp{kB~U6Rnwy>uq(J0@-C(nY0NWtC z-py-B%jX`~>Y(}V5X!@3HcioBQ6OFO0Bv#MWPZg8%WE6R=Xjki;y;0lOb87h9Igf4 z-=Xt=#aV+L%X8fpO6DFC&mC}5zOBlg$24qT&Gw!ZB&{>MxV+oCe~-qrrmYlQE3)!c ohN|uRk~J^eWVLp#+G#UKX0(+o@s(oROb^VU$PQ<_-|nyTFHVBS5dZ)H delta 353 zcmXxfzYf7r6vy$?R#p9Jq+$?E7U^IY5(7gSJb;)yf~1254`9+rJc3Ci2D4q_4ZH-S zgzt$u$uFOKZ+q`O_f&r6Ru4b56UrksvLPk%CR(8(GQ=UKFvceCv5(he-8Mxs%(LiX z3A0#78=F|f7V3Y!-}*{I1`QU*IOVW8PMF`VUsD0M4w$!bjZ4&KKUhVN)9V;u1w-_4 zhWelg%eY0|cfc-Q(2xzBD$h#rb9x&G_jY I&mA{1zBl3\n" "Language-Team: LANGUAGE \n" @@ -17,52 +17,76 @@ msgstr "" msgid "blog" msgstr "المدونة" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"يمثل نموذج منشور المدونة. تحدد فئة المشاركة بنية وسلوك مشاركة المدونة. " +"وتتضمن سمات للمؤلف والعنوان والمحتوى ومرفق الملف الاختياري والسبيكة " +"والعلامات المرتبطة بها. يفرض الصنف قيودًا مثل طلب إما محتوى أو مرفق ملف ولكن" +" ليس كلاهما في نفس الوقت. كما أنها تدعم إنشاء سبيكة تلقائية بناءً على " +"العنوان." + +#: blog/models.py:23 msgid "post title" msgstr "عنوان المنشور" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "العنوان" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "هي صفحة ثابتة" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"هل هذا منشور لصفحة ذات عنوان URL ثابت (على سبيل المثال '/مساعدة/التسليم'؟)" + +#: blog/models.py:76 msgid "post" msgstr "المنشور" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "المنشورات" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "ملفات تخفيض السعر غير مدعومة Yer - استخدم محتوى تخفيض السعر بدلاً من ذلك!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "يجب توفير ملف ترميز أو محتوى ترميز مخفض - متنافيان" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "معرّف العلامة الداخلي لعلامة المنشور" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "اسم العلامة" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "اسم سهل الاستخدام لعلامة المنشور" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "اسم عرض العلامة" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "علامة المشاركة" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "علامات المشاركة" diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.mo b/blog/locale/cs_CZ/LC_MESSAGES/django.mo index 746516cd03bf22c22cf247486374c93dc1897e6f..7f399a81c0f3c9c213c06f2c95d52822cfb85ba3 100644 GIT binary patch literal 2403 zcmah~&u<$=6kbaCWq!4wf`kxy6_-?aT_;tm)+Im_(kdv4L*hgNap-t=Y>#(6v+T@l z>mcs*&?AQ^7a}1fgd+F{+Kb~GS1uelaN{399QkI}aY75i((X4iJM-T6zW3(&w^vSo z9pHBs&zpF@#q&Cz>Jxb3_Z9Fio_lzfF+cTW5S#|C0B3+7178B}02hGwfQ!JNfo|U! zyq*P~13m|Q3s?cp0G|S00-gb01G;@5P1ZMoZ)5%m@H6=S68Hu1R~%|#efycx{tv)e z%zpx&1O5)&1pWnF0j|L43&35Vi|ae!Yru!VSAoAwzW)Jy1M@$DF9Xkl?9;&Wzy@#z z2=`tm_ua+p?7A3ST%hOU0t9gFV{zwS!~-e(&&7FaGIsF%iE*&Ovz%)#jV4CzRCOs+ z+R#A7Jgrfy$7$Woqm*e)G4BY;H5n{xliSGHoD-8VwRw*fLgl17C+*Z|*^rP?YGWK@ z#^j=H4Tc?TW!CgmUL_+;%BvJ9X~3gODlCdISGOr?y-5{=h~>f*Br@ zVO?D^ElF|-;}LwoAV@OdV$(M25!00O&#lOX>=GAmW$kHtc zOcy3n(7;0aHm59Cg@|Dy#FDWrO^3wqLRBpa9=NOph?3_{G{`~ND~;#~#OH)|UVT>a zEf5gHc$OLKayKBDoKbOR%1+K95Ye9EaOH*T_(VmbRA{mNw~9tzN5Fa4C?{a8-9j94^?d z4qK{0mGx%0!3*IIgdd{z8Z=j*yByZ9gtJ$uezkG=+B@~xdcCs3vtMB2M>{=)vwm2I!XywM*t*slkmi~8t zgCZS9JC)Vt)urQrW)a6?d8NYEFaue`@0yDcPRQ#N^;oXCncr&N46h#VbDTR6a7jig z#w}^k)wVE|_0;Ap4R5M^pc^DJKh^Vd*Qp%N&qz8yPqP=USAzBNE{{=Rh3zBXu8mMO z-W?t2>~OD0EK=gzjK!68%P}h(jBhROi0dl}`iezKMm<%G_T}i{zf3gSn)Tc%R(6)5 zyDI)7=B!F`w7=;i*)%G?%KLt(JEc)j!@9ac;*Cxg32@JCYsVPjJbP zI2J=`Bj-pB_zt!lRH@GrMOewy_#ul~!4nso_eGMo)v*)O%C=PwXABKZ!bn^75fqjW z?=vkA_i7L!M$I`7h9zJyZ6%?+u5wLTw!3*nv?!xYpkNY;XdD3+5>QO(H zyzh=>UQ#dH&~;AKAbcCu0|A9hi@tHGKy6Hqo_FOtsa2i?O?OnCQ`OFyFP}-uXuR(&*`u?M%!4h^EYNCFWV19}9PSxWj2=v? P+sjv$>!hqF7cKZ3p*O(fB{huw9rPh5^OAN5)mu0(Nox2c>%j1cm#X#0QQPEu+bA( zSy=dQl7Zpd*G>CH z)E3>#*u)I>afCzEWXdWH8`WfLdd}j@>aQ@56iMET8$%q-C;4=(zBJN|?fGVu^k`}C J&$Fzr{Q*+s8Sel9 diff --git a/blog/locale/cs_CZ/LC_MESSAGES/django.po b/blog/locale/cs_CZ/LC_MESSAGES/django.po index 82fa5c79..31303129 100644 --- a/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ b/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,54 +17,79 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Představuje model příspěvku na blogu. Třída Post definuje strukturu a " +"chování příspěvku na blogu. Obsahuje atributy pro autora, název, obsah, " +"volitelnou přílohu, slug a přidružené značky. Třída vynucuje omezení, jako " +"je požadavek na obsah nebo přílohu souboru, ale ne obojí současně. Podporuje" +" také automatické generování slugu na základě názvu." + +#: blog/models.py:23 msgid "post title" msgstr "Název příspěvku" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Název" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "je statická stránka" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"je to příspěvek pro stránku se statickou adresou URL (např. " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Příspěvek" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Příspěvky" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Soubory Markdown nejsou podporovány - místo toho použijte obsah Markdown!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "musí být poskytnut soubor markdown nebo obsah markdown - vzájemně se " "vylučují." -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "interní identifikátor tagu pro tag příspěvku" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Název štítku" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Uživatelsky přívětivý název pro značku příspěvku" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Označení příspěvku" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Štítky příspěvků" diff --git a/blog/locale/da_DK/LC_MESSAGES/django.mo b/blog/locale/da_DK/LC_MESSAGES/django.mo index 19837398dd8a43b68c9faf67ee1577c7b47eedc3..07e694bd2069953de7c56c726994932eca4772a6 100644 GIT binary patch literal 2338 zcmah}OOG2x5FQ}B%qv77E(le`Wg|R}H&LR*VS(&s6FJ!z8*d~e4rzPJKY|^7-?X{hxtNtbYNX0{#uW z32eZa#Bl(GDES8X8t^-y`1=7UIsa7e{|0;m>py__Cx781@%;ll4V2*FKAsUflJmYE~`Y2gD+ii}N*dLyPi zSr3fzo-!V4%bo(nKDcraO2?#ZMtvTsnJyd^!{c^Z)D5KVz?2z|sSup*mjTluR8<*9 zg=Rj7?IbL(gbC>D7~4-%#`s3 zOi!nUllqmRn5du!Bym#CmK~ObrM~hA6cZ_2Ot+ONnkYBUihH(livW%Ubt!04qV#>H zsVinWgNYQPP%2~Q#P?BEuVw>7~ z91wZw`N<45u838ZNObX7du2PkXE;9oo9ObK~IZjm`hn?@*@FY~0xHZf`zH zXcc*ER8K1H&8G-9@cnQWh12#54Mxg&4r>R!>*=LOdJ^*x1>CfQBEu``(51c(jXhI3 zWzy?~oA?gdXDqu&SrS3ky>umagG)bVPtWLzQ?1?-Qv)C ziy}$j#e{|}9)pNfpfR>)jMTwrOUJ~|20$Co2G*s95KZt0%CR9lbo{m?{S0zrV??BB@q^scq7amS0-KtTO z9(YE=s6&!9nDUsQRzy}J4{VN(?x>lqYL1$KE~H1~d}^_g^rG%M!eBRJYow^M5seEC H)}{IvsA|}* delta 352 zcmXxgJrBWP5Ww;4i?^a)YC}RS2JsaPmX@&DdrC3dU@{JeR=0B9%XwigiF@QCFzkLQo}by0u0c`2-~>9KAz+Agej7yb})k;I#|a9 zwy}s^)V|*Dd?7v$Ee^&w<+2$Lsc+VAV3nyI>IUk-5vFj31>B-ue83W(;`bMR(|W$&>U;j{FDvNj5I@OC!Syj~B}|qcAm(Ch6-J D6-^ua diff --git a/blog/locale/da_DK/LC_MESSAGES/django.po b/blog/locale/da_DK/LC_MESSAGES/django.po index 9492b49d..b802d550 100644 --- a/blog/locale/da_DK/LC_MESSAGES/django.po +++ b/blog/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,52 +17,77 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Repræsenterer en blogindlægsmodel. Post-klassen definerer strukturen og " +"adfærden i et blogindlæg. Den indeholder attributter for forfatter, titel, " +"indhold, valgfri vedhæftet fil, slug og tilknyttede tags. Klassen håndhæver " +"begrænsninger som f.eks. at kræve enten indhold eller en vedhæftet fil, men " +"ikke begge dele på samme tid. Den understøtter også automatisk generering af" +" slugs baseret på titlen." + +#: blog/models.py:23 msgid "post title" msgstr "Indlæggets titel" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Titel" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "er en statisk side" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Er dette et indlæg til en side med statisk URL (f.eks. `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Indlæg" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Indlæg" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown-filer understøttes ikke - brug markdown-indhold i stedet!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-indhold skal leveres - gensidigt udelukkende" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "intern tag-identifikator for indlægs-tagget" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tag-navn" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Brugervenligt navn til posttagget" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Navn på tag-visning" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Tag til indlæg" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tags til indlæg" diff --git a/blog/locale/de_DE/LC_MESSAGES/django.mo b/blog/locale/de_DE/LC_MESSAGES/django.mo index 1a7d846228f4e2bc74058bb22b78a2115bfd11c1..ef491dbdd3f00b78944fe2b7cfa61cedeef4e8ff 100644 GIT binary patch literal 2430 zcmah~OK)366uz{Df_arnJQfI@icO;Wx=y23sY`%3bs|GvwVeng79HO^zIW(&u9=ye zG?v)Y4Lc-uZ1N9~Sas(uzkmh*fh8Nncjh_|C=!L#pyDuhx@>$NR;q0B`-2pF|9~S1LFzq zfI*NHihXlsl9O;`xKMTdn8?lvMpV__es#gVD51%b1PxfC=mA^lL& z#1@Atg^3tbz7$#?lY9bIojQ~eM=gSv(z0lfgRs|lHB#`8h2~pBRIwH*h~WdviO3`m zeU6W)c7(VPuh0<$I^DY8+oA>8$QtzMRxb7A7G4Lgw#SbaKZ(w0bG%>)Pl838>jKut z(t~;FoR0@q7^j6VER1jN_6V)Lzq5NlAFc21 z4A#~MpKk2;I+*G98tc2;ALE$GN+=%>q!_noYi(z9e{Hk#zx!Lr%Q%&_?e2Ex+@U4- zv0kNAJUE_!td~#xEeNN~eM)j+o%E~wgN=CQd>?ZjLBNhliWFJWqLrcYwLM*0q2rCh zj$Mn)Bn;i^?fX=9R~HQ3Sf!=K`?aX=rPdzlWvGpZ$$^cxxteH7g>BFSCFygnCiBV? zY6@PeM_48GQB@wJs!)ldk|JRdpj>Da2DXUT#WvAHUUSy>aRg62pPk^!wbSxKquDb{ zYe+{_mw^JII&}@3IWI0S$RSh$^9Dtw&ne57PRmT@vtO)23Jk&}7Z^)BJ%TKrI(WEA zZf7UvacPk0b(%J)-C)X&86C+K$;Yj_n4o|SqFlI@q(#1AK`T@zpivCUw}d5<)9 zlxd0K6y-`G{n+7>Q{DO5Ge7kxIylP8omL;vf{gGc-sA!VWkC?Dqrhepqf~Qxv+bab zYeXz9ZO_Y5c-rcm@Y(#_6BH!}au$p-iR|TQA4#}jkmP|hfrD0Z_7kQYyOv2v>ykfy!s2sN?JWO&Bu7bzb_>U*XB5G84PyC;Q!c{p4V>0Su0lq_Ver=e-tEkQg zkNUic#tOCQ^q{3s%Bo=fM=d*ZHiQWz=AKm{`G@i`p#UDC&R`dZh41iC6@RAZT2`9L z8_}Fy1b>(-hix delta 352 zcmXxfzYf805Ww;4KeQ;RNy5TXk$43ILmA8l&p=``^##PzNV<6lPhhf0ELKL7M-Y6E zy5#!l@0aV{^%Y#a_!ih(A$+nyuE`qtBsC&KWP~HMF~Ja19N;0lcTAB2XAfPhp@&U$ zFvKeMQ0w}?`&c4g+FVR\n" "Language-Team: LANGUAGE \n" @@ -17,55 +17,82 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Stellt ein Blogpost-Modell dar. Die Klasse Post definiert die Struktur und " +"das Verhalten eines Blogeintrags. Sie enthält Attribute für Autor, Titel, " +"Inhalt, optionalen Dateianhang, Slug und zugehörige Tags. Die Klasse " +"erzwingt Einschränkungen, z. B. dass entweder der Inhalt oder ein " +"Dateianhang erforderlich ist, aber nicht beides gleichzeitig. Sie " +"unterstützt auch die automatische Slug-Generierung auf der Grundlage des " +"Titels." + +#: blog/models.py:23 msgid "post title" msgstr "Titel des Beitrags" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Titel" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "ist eine statische Seite" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Ist dies ein Beitrag für eine Seite mit statischer URL (z. B. " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Beitrag" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Beiträge" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Markdown-Dateien werden nicht unterstützt - verwenden Sie stattdessen " "Markdown-Inhalte!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "eine Markdown-Datei oder ein Markdown-Inhalt muss bereitgestellt werden - " "beide schließen sich gegenseitig aus" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "interner Tag-Bezeichner für den Post-Tag" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tag name" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Benutzerfreundlicher Name für das Post-Tag" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Tag-Anzeigename" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Tag eintragen" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tags eintragen" diff --git a/blog/locale/en_GB/LC_MESSAGES/django.mo b/blog/locale/en_GB/LC_MESSAGES/django.mo index e8044a774a22c6a9626139b706ecb0c0bba26394..303f4659263612862fb28dfd387f7e26d46fa156 100644 GIT binary patch literal 2252 zcmeHI&u<$=6kbaCWquVT1P6p(#er0K9Vb<*)FD9ZI+0Nv2X`IB0jcBN@$S&|%rY~Z z#zY_R8PF_r`7-wMgZLkXU)AJ_x_0pxX;(7gzJ3-}W7 zJzxX427C^96?h4F1IX(>TiI^`-^ct*;1`Jf9gulEz$WH#_`=fvk3i<}Gmv@w4rCq= zfH#5fz$vyyUjfXN zqfE|}mX18k&f7ZmwUs1vMpIdc6J;!!*?B)L8hBDVE$a;1g!fiWYmea!OGWJqW1Hla zFJ+Tbqdj;u$y8n$ElQfH65hQRX)zCPTv_MM5D#ojs)Uyrd6By%( zU+v9Yc$E_Kq+DugF*TZ|!ht9TEL=#p6$zRPdnYq@^)f67oEcV9(7cB9Q%RLICn|%B z7$#qfvRsfng{n@S$cRrZLYC69Xpn=jR(my5$d85QsNq!cE>aM~2bPt{B~N{UPApf1 zb0L01cOlTjrIYait;ts2qTB0*EUR_g4urOg+gCn`&S>*_!4s|oi?-4QtQXRQdF|wr z87dr+6j{XdLdX2i25vRt3lfGd;`B1*s!}XSi@6Mj|U9PgYTjwrLOotjrqj)S&6mN)c;_h{5 zv%PsOZeNc#u2XxfbM3~5?TvQ3aUh(J6DzbUg*O(?_eWzw>rM_w$MjKebeQb+l27+0 z<322dajQ2PevEB8uc3ULNHOow!S3PyWOu*+)b(IC91Q!9a@jx%z2(;wCyNR^y*%~n z&`jxVN(*6~^gEMeFW!2zj_J;zU0jqq4T5jQ5P4yAJ6pOx@1rHZ6xc zYnm?a(8iVR#{acssri4omURE+S~5Ie6aT)J*r(Kz%Mt%$g)S76@c)If;ezP{)Vok9 V*zBU@@p8h3P)?GtYVr@t$zKEprVRi9 delta 362 zcmXZYzYf7r6vy$?URA9>@o$l^u$a7nL4tuMtlqD{7HkPM$LUr}eM!K2oMRp9Vl$yq^@awSK8}%;uVyz_qT4Z0rx5 Lg?*Z?9TpBhIT;;n diff --git a/blog/locale/en_GB/LC_MESSAGES/django.po b/blog/locale/en_GB/LC_MESSAGES/django.po index 997d8bc3..dce1f626 100644 --- a/blog/locale/en_GB/LC_MESSAGES/django.po +++ b/blog/locale/en_GB/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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -21,52 +21,76 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." + +#: blog/models.py:23 msgid "post title" msgstr "Post's title" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Title" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "is static page" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Post" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Posts" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown files are not supported yer - use markdown content instead!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "a markdown file or markdown content must be provided - mutually exclusive" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tag name" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Tag display name" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Post tag" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Post tags" diff --git a/blog/locale/en_US/LC_MESSAGES/django.mo b/blog/locale/en_US/LC_MESSAGES/django.mo index bae15276cde060f63b28c52fc7ddcebbed6e221d..97d0a9d2337fd388a8c848bf7d0e46e5135b8a79 100644 GIT binary patch literal 2257 zcmeHI&u<$=6khs+7W1nhAufPk#er0K9Vb<*)FD9ZI+0Nv2WK4#sfUht$LoRh%rY~Z z#+5ij4;(qd0U>eXFDZXP5Bx2BZ|tT~TdCX-5-ZPqGjC_!``$OR&wssr;im}CTWIg0 z{f71~TKy$-czyt$pglnAVSes>6kP!B0at)u0^b1M2eyF^fF0nUKwftR-DTiAz*m4D z0BgV%;6>nd;1%F4Ag}vkX+H#hi1}B*JBa-qka;}9CgyQ?Y2p88AoKVY$UGhbna3mG zZQ%QGimlNY$o_M5%%cRp2D}es9^V6*$B#h#qFu8W7JnaA6a?J4RnQ=6frIk)!(3IPfDjnm0_Fk-l}osF`QtjsQlE}I(g*_ zS*O%!4<2P*{saaKcp{1!@F%OxE!WpIK@P%N?bSpfKNgy!hEv76NI?uASe7D}JoQs_VzDBe z3-KGe2Z0_h9S!$rMKf>G(A4%(QLM`eZ_1fJ-y549unl*eBIMKN8a+SsHDtB>WT2wn2#6x+kctd;}cdte3 z&Gj2`^JctulbRc?8@E1gt~HyrJ>h(uSfO1Zys>b;I~WpLd$d0|qE9-5{bak7e7-Xp zc46ra8=XP_Q*6_D1?A&Jidl>Hw)b~O+q>Ntu5Xdlaph|LUcdV!p*7^uS$tA)GA}{a z%M-r};gsH_bSkWqeruHM#2Zi6G3N;c?CR8H_)1!|F;>2IP*heF@s6=G*CJhpsoPrL zq{VP+Mbp(STD!Jc`@f(pH2*Ibl=i<|Q2J*JEM zfWi0Blb(KVZ*I=7?XB|8#gA%wB~*#7(+fJFKeX1shzxOvX|x#O8oPK-_T7|-$Fq+) z4A93AU5v1dZPas}|9&h37A-c$IAPcfHSp^E18byeU;}&DM=n`#(?Ltrzzr5~hZ?v? z4LqTqyCnNJ)Vw(#i+WIp>3|Hae}(svBF*_<0Q`#glYFw)FSW**o2hMh&BM!i P8k=%PcAIV6&^vwscfuY( diff --git a/blog/locale/en_US/LC_MESSAGES/django.po b/blog/locale/en_US/LC_MESSAGES/django.po index 59f83586..2cc22cdc 100644 --- a/blog/locale/en_US/LC_MESSAGES/django.po +++ b/blog/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,52 +17,76 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." + +#: blog/models.py:23 msgid "post title" msgstr "Post's title" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Title" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "is static page" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "is this a post for a page with static URL (e.g. `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Post" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Posts" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown files are not supported yer - use markdown content instead!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "a markdown file or markdown content must be provided - mutually exclusive" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "internal tag identifier for the post tag" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tag name" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "User-friendly name for the post tag" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Tag display name" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Post tag" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Post tags" diff --git a/blog/locale/es_ES/LC_MESSAGES/django.mo b/blog/locale/es_ES/LC_MESSAGES/django.mo index 862ea8c506e090d28112f33d258679dff9fd8d3d..7ab1fabfd561efa7fb7d287471d3c2022ce37aa9 100644 GIT binary patch literal 2410 zcmah}%Z?jG6zzoYGOqv{g#|)4VlxqLk0&8f;$eW9!80<B#=_>F55M9S9PkY zCvhb9v6b0T+PJ z1K$GHfQ!JVfmeX%fj5A>@8ik*P2k%Ye+K*SAln2Vl4dkGDx2p`9JcG72HUbF8&7FIf`y(2-r%nYb7&QoqunKh_8 zl(f&|Booe2D*H-HM;_D8+cNQ`l_YdZJvkI7%2+b}c{>g2cv3pa$`r?h_g3{vk8U4Z zMd^pe*2ycM$vP!Qd+?}}DZDaTWYkv~ta~q#VIEdoRu1aHAJ~{g2`^LfV&E#K6-lXK zJb@1w1WBPdHdiJ?5{|6AT`H^efTThccIuUw&*KgWTuB>GJ>!SuR9%G#K)a9K9bg_^b=KQA=}M#7Xx8v3P|mDlK1HsYNqE5mf3*M+}66a3ifq1$X(vHfUP}RhbA( zB`uT*1T#?0otTH3ki=Z*a;TBsF9wlqc_y=ERW~wqO zMOWBls7?%t^tfcprbvSB)T{Rk=U&||rH5>Ypf;(1(9CEn(9#l$0=_EYqtdbc+;9{K zleI=#HPsmSB*Qs*%x|3vX$_tXiM$8emClS$HEsc-l+ZRTsPXqWndZt%HeZQLqQ*aB zmUU-*3gHQEgZSV%3+v$<4|N)RBf<+zWu+%bX^7U&Gn&0*GtounJe!<|Pasvv&xrZC zXgvtfL~|06LUJlO3f1D0P7+DsnL{JEg2niBptzFGSLCCI4?qyN#D_TMs~k!>e+UXm zEK0M(w1|jE9?QJoGXINA?Lw+?Jwgg+MR2q;RpFQ(o|ax^>K-m;csLyWY*}h38bR2F zy%_D6y$tDwLmjo}gA>_o?4oXU=|T;VH7AZGPJ*&=(XPpR5K3H=x%~Xc?8MG=wLd;h URK`b32MQrKb4I2%s|OPO1JC;F)&Kwi delta 352 zcmXxgzYf7r6vy$?)}Ja$Dq>-h2$7iV28)u|m^=lE#AGws8i~~dn9K%~rHKcSSZrQE zBnIC@-Q<@~&q?pSr+s*#v%Gn+jj&u&CTmh4Z=$Pbi1_GZ3zYA;J+MsUY07sa{9p-S4df^du@G~ay zibcFfzM_7PY1;HlXh@%@Xz3=MOb^qE6GZ\n" "Language-Team: LANGUAGE \n" @@ -17,54 +17,80 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Representa un modelo de entrada de blog. La clase Post define la estructura " +"y el comportamiento de una entrada de blog. Incluye atributos para autor, " +"título, contenido, archivo adjunto opcional, slug y etiquetas asociadas. La " +"clase impone restricciones, como la de requerir contenido o un archivo " +"adjunto, pero no ambos simultáneamente. También admite la generación " +"automática de slug a partir del título." + +#: blog/models.py:23 msgid "post title" msgstr "Título del mensaje" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Título" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "es una página estática" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"¿se trata de una entrada para una página con URL estática (por ejemplo, " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Publicar en" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Puestos" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "No se admiten archivos Markdown - ¡utiliza contenido Markdown en su lugar!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "se debe proporcionar un archivo markdown o contenido markdown - mutuamente " "excluyentes" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "identificador interno de la etiqueta post" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Nombre de la etiqueta" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Nombre fácil de usar para la etiqueta de la entrada" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Etiqueta postal" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Etiquetas" diff --git a/blog/locale/fa_IR/LC_MESSAGES/django.po b/blog/locale/fa_IR/LC_MESSAGES/django.po index b07e4947..11e2aea3 100644 --- a/blog/locale/fa_IR/LC_MESSAGES/django.po +++ b/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-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,51 +20,69 @@ msgstr "" msgid "blog" msgstr "" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: blog/models.py:23 msgid "post title" msgstr "" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: blog/models.py:76 msgid "post" msgstr "" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "" diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.mo b/blog/locale/fr_FR/LC_MESSAGES/django.mo index d0b3e7b00cc7d554c665cbffa04a9ff3e91d5ae7..79a3e2037a26b66d117e280f9b471387fc89c0c1 100644 GIT binary patch literal 2453 zcmah~U5^w+6m1dw7*N54=!4NqjM*h_53>*u23Oo&2eM|rTxLlyno!eS(^J@8)zrtb zOX9oy0RMpxj6Rw859ZZpAAIn)cy9H~EW(4G^qi{ds(a79x9*vL-aYwqg6ACG5Agni z_dUEzuiyvIPryUGPw{SGe&W?6ISJeZE&{&+z72c=TmwD@t^@xB^1ie9c>{PJ_$Kf} zU<lo{>8V~I@dmC>T4p(Sc?9@#$-x(nUfcVYnV19rH1hgK41_e zh2q#;$VMa_S@|d^t8_t9AqqS5O3dd)hXk&qji-U}BXX(=r59S7;L4*InJArs>AE(S z^B26SgjX3cPb#FA7E_~XARLHdz=@0Dwi7{>us`JHv2NUgz8K# zUY9O+E?-SM*V5%{)VbchdgIg1a;MYU6war8E3_+xHx|b4?CcTVwf*g#d-VDG&USxw zz5nIy{k0UxZgeQdHgyMrNR}CgdAF$XYdk*Xfl@2pyPlP=wdI^ z;9ia*gt3=k>F80Apd$|zBm(|oJWb07GNG9dRW{=OjbxV4IOx$D0>^dB%LcoEsEz@+&e7L&0i==2sMH3R3s@}se0PpIAnUATY-M(s7HeT4rn0JW8(va3 zx|M7qInFes&MUqhPq;n&C+D_SGa zal-YDx3T%kH>K>o6BY5&W?_tTnk{ffeK-FXcDc1f-Nz|TP#W&BgeR27*USeNs9)H` z4|?cvNY2%Hv@k$Jjd;t#Mwv{emyOay{tEM`GD)BGLP&%8(#BHAmukaY9&ctPrw{f@ H@0|A!vwa&J diff --git a/blog/locale/fr_FR/LC_MESSAGES/django.po b/blog/locale/fr_FR/LC_MESSAGES/django.po index aa158eb3..bc855aac 100644 --- a/blog/locale/fr_FR/LC_MESSAGES/django.po +++ b/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,55 +17,82 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Représente un modèle de billet de blog. La classe Post définit la structure " +"et le comportement d'un billet de blog. Elle comprend des attributs pour " +"l'auteur, le titre, le contenu, la pièce jointe facultative, la balise et " +"les balises associées. La classe impose des contraintes telles que " +"l'exigence d'un contenu ou d'un fichier joint, mais pas les deux " +"simultanément. Elle prend également en charge la génération automatique " +"d'une balise en fonction du titre." + +#: blog/models.py:23 msgid "post title" msgstr "Titre du message" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Titre" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "est une page statique" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"s'agit-il d'un message pour une page dont l'URL est statique (par exemple " +"`/help/delivery`) ?" + +#: blog/models.py:76 msgid "post" msgstr "Poste" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Postes" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Les fichiers Markdown ne sont pas pris en charge - utilisez plutôt du " "contenu Markdown !" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent " -"mutuellement" +"un fichier markdown ou un contenu markdown doit être fourni - ils s'excluent" +" mutuellement" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "identifiant interne de la balise post" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Nom du jour" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Nom convivial pour la balise post" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Tag de poste" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tags de la poste" diff --git a/blog/locale/he_IL/LC_MESSAGES/django.mo b/blog/locale/he_IL/LC_MESSAGES/django.mo index a2e13bb4ce55980f42fd08c36b132cba8aff64cb..626990200767a55019acf88a49202352912fcdf1 100644 GIT binary patch literal 2561 zcmah}OLH4V5MDxfiC1`}I6zSyxHuK9A}5uUBV$5roRlfQaO6~_ibF=)kuseVcgojqUU(ZZW_t#&~?(eT2?0ERS zg8MDp+qmDroqqxk{JsHR!+jn16vhXh^t^+>Y2Xm>W8h1`FM#8~>%a-%&p`G&gvYbM z!@%c&Zv%6{A>dQMlfXm3GeGwHs5gHR_%6nmfuA7vm%u-OzhToX=6`u6^M41M#xOnx zd>yEOmw{ga1@KoO{$2^mxyA|LYrsX|VW0xO0Q?&GCh%L}i@+Tq^ZXHb7Wfko>0OMM zfm}21;~KE!YGr@^ftt(tG>~IK3isnW5A?#wXjuE=miWAl^HE~lIRVC(0bs5P7!#JXf&>#wfg>&T=JV8y7d=|u4qbw~5 z^e1{!P&0+}6-limUQz)<_?R-O2*YKP*PyCaOVZ=6d8kq*EE?n>_(n$66zXH4Ijid` z);t9axh^hD(~vCG3v}gpLx!#6I2}lxEMGZ#*6Y*e zejyT$1dG zkR|bJiIPzOk$B;83FeddQ&~0sRN!BdiAIM?GT7{k`j$nl*!G9X(B@Ze4I3OiK3Pp>ai1}l$m2g5gi$$;iIED&)&7`xE|Uyg4wY* z>;~Cger#iO-`*m-ifaRdwF0|*2m6ujX5Sf%*RW;X?$|cj6-?VU=2q<{k2@H&ZI=gd z>+tHoM{Xm^3fbH6+rS0it{ZG-8@CX&V|OwJt9B=!xptAc3%iTO+x8x;N3d4y19p7K zJM0fktb=kMB0~pcHtc#nd*?Cif*DUEAFp)SM4enkR;jCtgKx9X3Y^)CW8Gm2T-QB< z20NJ9<*LCQb0FjL^7wH|;JISI=QWhPfqk3U-R6j>(ziE}oo6y8P8W`O7g51sE%W21 z^@Z=)Th8GY@5*F$Up2eMt-Oz|$kxVwt{9RPJUH%h?)xb0(LlET*MUXr>pJ)n_)Ia= z69w|Y*y01=ITL5ZL#ms|1R?fGyY0%sQ6sqb8o6(|y?59=?Ch{6H@Iy$eYg<2jf~Ld zCNpA(8;IhRc5Yi)Cs?6X6we>Oy{#Ayf#O|v?*8Fh*lP`hq?x_XJ94dqF7j=n1lHWO z+La0O9=?qrvFp~LAW|YRw|fv_72CM!caC_2%CdUVoZgG&{Z%0MvU!6Jagx4g&tN7V tQiEI9o$fW3!M#)bo1wnWi1XVaBL0~ANC%_=M01nmQ38sN?4^Du>kbuBo5F7%9 z;6H6Anf!LQn{OxGHui\n" "Language-Team: LANGUAGE \n" @@ -17,51 +17,73 @@ msgstr "" msgid "blog" msgstr "בלוג" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"מייצג מודל של פוסט בבלוג. מחלקת Post מגדירה את המבנה וההתנהגות של פוסט " +"בבלוג. היא כוללת תכונות עבור מחבר, כותרת, תוכן, קובץ מצורף אופציונלי, slug " +"ותגיות נלוות. המחלקה אוכפת אילוצים כגון דרישה לתוכן או לקובץ מצורף, אך לא " +"לשניהם בו-זמנית. היא תומכת גם ביצירה אוטומטית של slug על סמך הכותרת." + +#: blog/models.py:23 msgid "post title" msgstr "כותרת הפוסט" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "כותרת" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "הוא דף סטטי" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "האם זו הודעה לדף עם כתובת URL סטטית (למשל `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "פוסט" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "פוסטים" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "קובצי Markdown אינם נתמכים עדיין - השתמש בתוכן Markdown במקום!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "יש לספק קובץ markdown או תוכן markdown - באופן בלעדי" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "מזהה תגיות פנימי עבור תגיות הפוסט" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "שם היום" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "שם ידידותי למשתמש עבור תגיות הפוסט" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "שם תצוגה של התג" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "תגית פוסט" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "תגיות פוסט" diff --git a/blog/locale/hi_IN/LC_MESSAGES/django.po b/blog/locale/hi_IN/LC_MESSAGES/django.po index b54c5675..aac3fc17 100644 --- a/blog/locale/hi_IN/LC_MESSAGES/django.po +++ b/blog/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -20,51 +20,69 @@ msgstr "" msgid "blog" msgstr "" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: blog/models.py:23 msgid "post title" msgstr "" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: blog/models.py:76 msgid "post" msgstr "" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "" diff --git a/blog/locale/hr_HR/LC_MESSAGES/django.po b/blog/locale/hr_HR/LC_MESSAGES/django.po index b07e4947..11e2aea3 100644 --- a/blog/locale/hr_HR/LC_MESSAGES/django.po +++ b/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-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,51 +20,69 @@ msgstr "" msgid "blog" msgstr "" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: blog/models.py:23 msgid "post title" msgstr "" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: blog/models.py:76 msgid "post" msgstr "" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "" diff --git a/blog/locale/id_ID/LC_MESSAGES/django.mo b/blog/locale/id_ID/LC_MESSAGES/django.mo index da0c0d249eed8beeb499ed357d137f1d078a66de..b73a6fe4b6b90fcc6baca99ec0cdd0642e95cae8 100644 GIT binary patch literal 2353 zcmah~%WfP+6m635GOvIXu|eoYY#e2JGES5znP4C`cI4m}&e#$NMDBFg^i-z0x~Yeg zL1M>(d;ovIH?TlrlO^H{vS7gnuwskEx!p6d<184t`qbmrz2}~)y8iQ>Ge0Hxy^Z!B z+Rte3qIF)t2frVI578c>ZD4%rbdsC_ZUPs9p99|neg|9uJ_4=+{{V{JS$tjro&&xL zd>^;~Tm-%dyaGH6ya5!uJG1$_zz;C~0{9hTe-Hct_yn82#{4%gxBh){bWzoPI+a6C#IpP3aTp~sH}2jx-=Lo z+Ldu;*n7&=NL%G8VA=;4vk;vkwmA*em=AU3s2Uyj)1{3-+GZx^*v26^J&Xa}5llIT zapgJ`bTFzzS!Dxwbf~I>t}GiGX#?*ea5gTR6>nnEY2txRm1zztr@)18nYJXAh4TzC z;1DEPOKv`9V`5KEeH*pYwjiaEg_}nu;d3$|fh*Z6(69<)^16&BuvJy`X4+)N##eA% z*Oe3fVyH?EIwRppg|fh+;YT; zYtftw$qGGyKy%amy-iwF-J(nPE{&C`FX46|w42_$@Nx2#wwxC{;Yx^TGhM)Xssflt zub$6Pl=C>DKCK;WtgPLoE8SkVw}3~16HT{#q4RVl7Cs$ReOlPvN%z#DmJR8r zxO;uN+`D`=?OjWku2JuL|LTp4y`^4nVUvAG2ac^b94ZIrw|DjkZDoIZ=YT$3-Ps=8 zS{;0{zQ4DInT@^f>dw|j*k+3e<y1n+l_I;dps`G`djjgq#gqD!U zYWt+p!L$b1pdN-x5Kh~hl#SVW6_)o0>*@6)JK;QnfNM6Za=em0T_5VOuxp}Ylde~; z^nJ2*GxW=sZ&KS`UbJ+6nU*fxTu8Rm1DY8{z~zZ8X|<=zh$j>CmK6phJes zS|hvJTdU;^8S8CDk(hF^rZ@q}j3AP&^g9eU4=u7>h}`?9t+13}%-FChh+D281av zDOIT5ON*uUY(&6WL2BqY4fj%#*5yCP$sAkdb3KzYr2^s{JG7JbUJbcmO$d!EJmvGr zE^-;na+>2ExoAhs#YQfCvW--s39g+1bto~PDUxPOJ8W)T8FM6`>p7oi#1m(1lm7r$ C3ef`q delta 352 zcmXxgzYf7r6vy$?R;l{0E0aYc3|_!sQG?NhzJtxw7myeliN_#fFd8KiiOnMM3|52h zNw1rneD3e|_TJMT>U%$a)iYaRl&J=_rUL3q=@?leA%>X21lzd7AzsY7Ym0bfAM+TX zk4<#3jaBTS?i-}*v5c6sSeW39!3i)dC6Kmu* z>V+TFM!wiZn_$V9nHhSRZq)8|W0umtLO)WXcu$Jde`pg06ZA_H%UK<7PT5YP+$M>< F#}9Lm92Ecn diff --git a/blog/locale/id_ID/LC_MESSAGES/django.po b/blog/locale/id_ID/LC_MESSAGES/django.po index 3aa1e8f0..32895989 100644 --- a/blog/locale/id_ID/LC_MESSAGES/django.po +++ b/blog/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,55 +17,81 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Mewakili model posting blog. Kelas Post mendefinisikan struktur dan perilaku" +" postingan blog. Kelas ini mencakup atribut untuk penulis, judul, konten, " +"lampiran file opsional, slug, dan tag yang terkait. Kelas ini memberlakukan " +"batasan seperti membutuhkan konten atau lampiran file, tetapi tidak keduanya" +" secara bersamaan. Kelas ini juga mendukung pembuatan slug otomatis " +"berdasarkan judul." + +#: blog/models.py:23 msgid "post title" msgstr "Judul postingan" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Judul" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "adalah halaman statis" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"apakah ini adalah postingan untuk halaman dengan URL statis (misalnya " +"`/help/pengiriman`)?" + +#: blog/models.py:76 msgid "post" msgstr "Pos" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Posting" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai " -"gantinya!" +"File penurunan harga tidak didukung - gunakan konten penurunan harga sebagai" +" gantinya!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "file penurunan harga atau konten penurunan harga harus disediakan - tidak " "boleh ada yang sama" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "pengidentifikasi tag internal untuk tag pos" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Nama tag" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Nama yang mudah digunakan untuk tag postingan" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Nama tampilan tag" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Tag pos" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tag pos" diff --git a/blog/locale/it_IT/LC_MESSAGES/django.mo b/blog/locale/it_IT/LC_MESSAGES/django.mo index 15a07f7ec1629694133cbc71738358f363bfe49d..f67d15fc3fde01ad023a3a79ac1fa7ae8455123d 100644 GIT binary patch literal 2352 zcmah}O^+Kz5FJ7YVIdHZA}%PZz=4hMINn5w5{Ct{i#IabFTD0jNF36hX^$J)-IMMf zCmV@7`2qX`4xG4h;)KMB8#fMcfFpl^8?SoC-c5pp<(b#r(_Qtds_Xs!#_4Yo{9ecN z7M^eMyosmv9A5Z+4Sa~_F`ho=r=Cxe)4*-uD)3X_tH4LV4d7$oCh!*^?>mpzS>OfW zOTdf372qoH1>iN{dEhM|@B5@#KLEai`Deh-;rlD#_rTw9XoU60FV^<|0P?=SfER#g zVPpWj2U**@p=XLGw?Owug&_O&HCRB{sTON?`J^zZQwZ|+{ZleIgXj_ zux*YD^kQ6q1XQ9gK7S4mQW1X~=c#7Q@bZaqGLWT{UYg)Z&{*4oO6vp7Y%X=1hEqxV zJkPZ7o^m-+MtTZZ_Q6$IsGKBWavIC2m@DhZPEOisQ$LV0nXYmi6CpS?t^$S=Y!y|Q zTGyhWf|f1HtO?-JB3lM!jnFhv8rDM)*>o1acwH5(=nrgcrbLiA1yT5#X-!fZ7|-AX z20>CNj?Guul!PZI?^ntxQ;<}M!Y#ZK^Lg4Kfh!psXl%ojyqZ-y2qSIf^-+vWXm4S< zEUn}GRl&|gP#G~#Dx{GPQ)_4}JcweziHqU36G1cKzRc|dQ@aI$m!m6kyWqeGU2Kvh*COE8qz`7Yl506#K(zdud%B5mMA16M3$u}Bu~Q> zFH!G^bs_#j50Ie6*3n>_R%N?r)4eNGsmm+49dPZA?p^*cS<>cu!4j?nC#}f~SRcs% z=9QPvMyOCCDe{Er#TWBm4tz7>3lfJu;qY?hOD&Gbh?$HF^&swo7ne?)k|sxz_`|a) z*mw2|nT52Ur-#ycRH#e6!~RC^fUdPW?am6C0u@bne4+Amqbhtlv|U=+-%AH_uJ}Ou zG45WMu6C|oPdhi#wHwsA*}Z=2z0O*vv$8FGNQX`suSKv9#_#S82+zi7ckhti-`v|B z-q{>}v^5&^u+ks2H}`fvz%f%)$b34KV%DYYJG*yBckcH7cYl{uNL5(b>F@N816o5I zn{`X2!=n;pgM1jSAaTmvrfe#lmtlQ0+)8gA?_L`?_*Mr(4#| ze3wiar+)qFZK{XstA;ME)7s_RE6G5VjiLxrx)u^`Q8TIx#ambp`PQ~+Th!9h$V?O% z6@K}Ah?(w@{&xzLie(omt*Qfw5JXaoH&cc+8Qz!EypY8!`j zr{PnJw`eU3R16CAC@K)PgL>>{P>8Ly5FT}sy8<&KA&-jYP&=y?%Ned7qHrpkDv6eB zQn2($iy&&5YkarRBWNGPyAh}pv$3j0ilc}6#Q0^K4rO~N$mLg)Ah&gB{xtvRq9$ga~#bB8W6*(;%J1!j)U#_PRMI2^%x5h$4<|;$uiDV;6 zQlml{Hv#e&6$(M4T-?R6<$wAP-k?3AP=H#PL~?*!Lpql^i`RzBcw#T;5X(}1#?q?D zK}F6=W&ca0`gKS<3(e&ednVn;6cn)wiNc*VbBX)cB;8a&(c;jhWFImm;+sQAhAc)X tdJJV4GaAE-^BrVW6opE5`6e_`KRKz7)N4pjrGlEvwT*}Fq^6(rAUdLyh7Q6rW_NPGxg14ksr7}IDl!Y%gjV)I@~#OEAf4nqvE zjvhu>!47I&_n%K>z@|xJgcF+0aLoDc{s*?0s`qW|YaMFCHEN?B7I2ScJlOo%=C9TV zX1IT01K;S#keyvw)Q0+c9iYYfS9p&U3F?1?;J0|6Yu*( Ci5t)W diff --git a/blog/locale/it_IT/LC_MESSAGES/django.po b/blog/locale/it_IT/LC_MESSAGES/django.po index ce39f1ea..75bdd578 100644 --- a/blog/locale/it_IT/LC_MESSAGES/django.po +++ b/blog/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,53 +17,79 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Rappresenta il modello di un post di un blog. La classe Post definisce la " +"struttura e il comportamento di un post del blog. Include gli attributi per " +"l'autore, il titolo, il contenuto, l'allegato opzionale, lo slug e i tag " +"associati. La classe impone dei vincoli, come la richiesta di un contenuto o" +" di un file allegato, ma non di entrambi contemporaneamente. Supporta anche " +"la generazione automatica dello slug in base al titolo." + +#: blog/models.py:23 msgid "post title" msgstr "Titolo del post" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Titolo" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "è una pagina statica" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Si tratta di un post per una pagina con URL statico (ad esempio " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Posta" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Messaggi" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "I file Markdown non sono supportati: usa invece i contenuti Markdown!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "deve essere fornito un file markdown o un contenuto markdown - si escludono " "a vicenda" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "identificatore interno del tag post" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Nome del tag" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Nome intuitivo per il tag del post" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Nome del tag" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Post tag" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tag dei post" diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.mo b/blog/locale/ja_JP/LC_MESSAGES/django.mo index a06d97f8727f49b2fdd397648346d25ede557a30..6ae26fca1fd0262d3dfa4b7f5c1dedc402977667 100644 GIT binary patch delta 1478 zcmZva&u`pB6vv%3P@w!sBM=vaMxuuxt+ofGN=TKEii9ZYfd)7rap4uF&AS7ub%96HZ(?o2k0!`X3X-_=?5?2nry!{n%$iKjMyqgjtEYEyq{NB9x zeQ#VnH1TZV!O+00f#)#B3m8{1p2tY_VZu`a&tXhroW#EWfME=Pr@&$GH25_533vjW z1YZY#1GV2ErpLhNz{kNC!6(3B@Dal(7_VS4h!3xV+VQQf!FUIJ3H$fK50Ly*@Ne)h zoC@*%{=sg*<2ZB#`!~QL@I!C}{0y7}{{(en3)7RJ-(vwBLVjZki$`IofX{%-AYS7p zCVk)@cntgLtj!EU_e_^jE?&h2AYvPy3qdKTH_G%|ND%Hye|Ub z%7Af}al9PMdx2zQURF41_O2z^+j?(0JP24;jM}aUn8fEm`k^U9Uoh@wSw>j=tnK;C z8{Hcx%}z>YyQULnag0mp+nKN+u^xpl52fY#DJE^{h!itDS3*dNd3kAjE_c|d?I66A z+_c6LOW=gLRFV*KJk#bhO2dGA(F-MwSUBb3Ms2p0rqCkA;rpuJFRZ8Bc2CPT(PSKJWRugQ4`sxU@~Cg|eJ* zg^#W0vJ4NP6bqz0*ey6c^Jd@pX&cgHawN}l!oXHqn0WUZk}ffAVIM>7uIqavr`WJa z=hE!VQA;@aqqr>ltnkOry!_hwy}rZ!g*l3Ur0A#4%EiX*GN~HHmnptL@ft;6ca~O2 z&6C<9wLrxvxnGK|Q+$o0Tcohqf4WsIZx_EOwbCrlHh%pUF`Bi-_SUt%VLD&UcZ%n! zs3^Kih3G29C7rIQnxCI<)@~(+Rf^{++Mu{f@j6tsHtsa;T%>rGq9xKtw7(VsDRB(_ z*ly2V-Y#CzL9tb}=8f-K#i~{?y+-Qp!zxJ4=rVg{6p}g~=2qqZ$pmkO3Xph`R9W|B zS+#CNx+xJ_Hig`c&860y4%M8VYAwLDw(EoTt&*BROOp8tsYdXHWt!kYMt7vumn@X!RO;JSAFBD&*xUQS3uWmWX+PlD+ zKMqv0>iYJjh4$hE#f#c6+B9@WqA7^)8t~5~|3S~ZQ!h2P$~*PN{eRF-9qriEm-EGJ Vdj$=y>W(P5R*>k(`uxCP-#^3VSabjY delta 357 zcmXZYyAAdmy7Z^01#E8IuYBW`i8l^-pyRZf7w<4 L6W?8*cE|Vu%)S~l diff --git a/blog/locale/ja_JP/LC_MESSAGES/django.po b/blog/locale/ja_JP/LC_MESSAGES/django.po index f43410d1..96bf9308 100644 --- a/blog/locale/ja_JP/LC_MESSAGES/django.po +++ b/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,55 +17,71 @@ msgstr "" msgid "blog" msgstr "ブログ" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"ブログ記事のモデルを表します。Post " +"クラスはブログ記事の構造と動作を定義します。著者、タイトル、内容、オプションの添付ファイル、スラッグ、関連タグの属性を含みます。このクラスは、内容か添付ファイルのどちらかを要求するが、両方は同時に要求しないといった制約を強制します。また、タイトルに基づくスラッグの自動生成もサポートしています。" + +#: blog/models.py:23 msgid "post title" msgstr "投稿タイトル" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "タイトル" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "は静的ページ" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "これは静的URLのページ(例:`/help/delivery`)への投稿ですか?" + +#: blog/models.py:76 msgid "post" msgstr "ポスト" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "投稿" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテ" -"ンツを使用してください!" +msgstr "マークダウン・ファイルはサポートされていません - 代わりにマークダウン・コンテンツを使用してください!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" -msgstr "" -"マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならな" -"い。" +msgstr "マークダウン・ファイルまたはマークダウン・コンテンツを提供しなければならない。" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "投稿タグの内部タグ識別子" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "タグ名" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "投稿タグのユーザーフレンドリーな名前" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "タグ表示名" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "投稿タグ" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "投稿タグ" diff --git a/blog/locale/kk_KZ/LC_MESSAGES/django.po b/blog/locale/kk_KZ/LC_MESSAGES/django.po index b54c5675..aac3fc17 100644 --- a/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ b/blog/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -20,51 +20,69 @@ msgstr "" msgid "blog" msgstr "" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the " +"title." +msgstr "" + +#: blog/models.py:23 msgid "post title" msgstr "" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" + +#: blog/models.py:76 msgid "post" msgstr "" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "" diff --git a/blog/locale/ko_KR/LC_MESSAGES/django.mo b/blog/locale/ko_KR/LC_MESSAGES/django.mo index c401f85e6766c35e83cc84ea3bf139e668695559..8777de4e0cfa68845480d464d4ae67c830e186fc 100644 GIT binary patch literal 2476 zcmah}U2has7#KA^+8$({A7d3R2EeL_dinO+*rqEipBqm;Px_i1iGCQ-*oGFyV zq@~4_w%9gyWx?ILB*hl8F$IdQ3H$@^yz{~zuygh=7@sq<+bv*pvS*(2`M%Hdyl3aH z*SF_1Jg=d>gSLY9Hd@;=c;T4_UO>Bo){F7BXEkj*un*V@{0#UC@FK7icm>!6{2i$F z?ZRsZ@Gam@;BH_Guod_m@BnZZ@CZ=t`?NlP8u%{8p98-@?yrG=0RP0He$4;;LKyFF z;9iV(;P7tX2f#kyX3>%r?y-~jMtAO}7Vbb;-_i$J6g ze0mkAG{1zVG+-&vs&uIblmad4yov=Yf=A`wR_`l#aZ6ttu2}78?jS{vcz@v@qtT1egnKWXUh%N+6q%*;aYkH}+ARpM+ z34;lqB*9W{$TTF$Ed);>2Lgg5Gn6*hOQeapDxPzf>(J*sC6dh$;AUC2h z$}s0#(mrp6X+dCfqHYCcJXk->DeKsyMiL=(ObL&f<{0q{aMd+Nxu&Y7K_z#TX|RK^ z*Am8v0e#A7l{Kg;)-(fVh=665rMMc3G+r#+5!8j$3Y~{Rjjcn2ebmY$sR*6jm*!@6 zA8rRyJ7Z_xKc;QcR`o(8TnS}b-50PP;{wb*mp`r0K#4d@YKmU)Qv5eNZoQ{2NYHgP zB`;~XS(A;C#WFmY2s^9RxqoKS*euL#O)B(1%_9r{c%E;ve@64R&LucQDe`fAS+7 zvr-E?IW89+L-8K{aC4vHJOTr|t%RM#za&P7hYis(V0sQS^&Z>FxG}P_!O-p4f0V** zN2^79I;j2qqb-_WS@Lfds=rpKS{Wz*&YFLpE_R{WVIdhDny=BfIiEN`yM>xeUdT`n)GII@((QZ0A85l3DtS1arC+JXw9Hcj1? z%L{GTSn%)M20qHyE-%PR3EinuZL%m!6I7dB+nL9`pspzI!-b-6L|FnR`TVsd{%Kv}Z!zxV^<5 zqz||UZUkbM*8N)*IJE#%wrV0$VMp zFRHJ~_iY|!P&}6#_eoP1155Z+waWZ-?CCF+Dx6%NR$-dw)h%mqki`m!!|h}LrdSrC zDR4$<3M(OJ9)#DBkP_cGTogHr5^nWt(-i*}F5IPZP@cS;svyyxrUA`fUHN}agm=5S rLkr!b+F}8A5|sKsO*JO#qbJYQ(*(CDUF~(?Pf+23Ok0-tFm?CLv4>K5` zhc$FC#3Hs)-Ru4K7ZR~(urb65&1N{FzFNOVb*8qcn>fWWssTq-4bR$}_NmWbSmxYe zdJZd?!VtUIK|=MpJd5@@ILW%p}sURtoh+$70hJsE)UzZ GZ+rj)ff`W& diff --git a/blog/locale/ko_KR/LC_MESSAGES/django.po b/blog/locale/ko_KR/LC_MESSAGES/django.po index 443272dc..ef333e23 100644 --- a/blog/locale/ko_KR/LC_MESSAGES/django.po +++ b/blog/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,52 +17,72 @@ msgstr "" msgid "blog" msgstr "블로그" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"블로그 글 모델을 나타냅니다. Post 클래스는 블로그 글의 구조와 동작을 정의합니다. 여기에는 작성자, 제목, 콘텐츠, 선택적 파일 " +"첨부, 슬러그 및 관련 태그에 대한 속성이 포함됩니다. 이 클래스는 콘텐츠 또는 파일 첨부 중 하나만 요구하고 둘 다 동시에 요구하지 " +"않는 등의 제약 조건을 적용합니다. 또한 제목에 따른 자동 슬러그 생성도 지원합니다." + +#: blog/models.py:23 msgid "post title" msgstr "게시물 제목" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "제목" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "는 정적 페이지입니다." + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "정적 URL(예: `/help/delivery`)이 있는 페이지의 게시물인가요?" + +#: blog/models.py:76 msgid "post" msgstr "게시물" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "게시물" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" -msgstr "" -"마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" +msgstr "마크다운 파일은 지원되지 않습니다 예 - 대신 마크다운 콘텐츠를 사용하세요!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "마크다운 파일 또는 마크다운 콘텐츠가 제공되어야 합니다." -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "게시물 태그의 내부 태그 식별자" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "태그 이름" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "게시물 태그의 사용자 친화적인 이름" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "태그 표시 이름" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "게시물 태그" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "게시물 태그" diff --git a/blog/locale/nl_NL/LC_MESSAGES/django.mo b/blog/locale/nl_NL/LC_MESSAGES/django.mo index 9353ce236e2940f9741f16892675157070b14cca..4e287430eaa6d385c9b1210abcead9e02e63b458 100644 GIT binary patch literal 2351 zcmah~&u<$=6kbZp5A&;l5Eq1Ag^*I=b)8nNT9*J#ngpYy39ge0#GzyF^Lmo?jG39W zn@Zg28Sx)*=f;&22M~V&NZhz{;tJoJT_;hCgq7KEc6R2?_r5pt<&W3Sew*O;D%x9U z-=V#U)_e*N{JsW0KzoGN#rv73ljJOL3%CUQ6!lBJdm*Vf(n|6`%(pN&GW)U*LsP{iMfJ$DU2_q-apsoTksrjxbe~ zVQgKKf(`{YX=qIVk0#k^(AKDeM!G=s5Y%uyiC=tC=FPYt*w~>~fins!_Z8EMBpU=D zVh;oaNu?z>Uk=BlJURZd)J~h6SR)I!*p-CO;~NsVlCgmXHjK&ZNm&GC*p|LHikYdx zTZEoYtrPvqU?(c*Aqh{)*|5W_H8fBjM9~r9V!EwF(L}k!%+5`y`FI*RZEa1I}r_X5ayboM;iHw(6Vc+D!wHeVuZ+Ys&bas zFvdewGh$sxzR(;3EvD}EwrGi4d5i8}8gntdgwuho-O>GvA124NrCx}HBO#*Ix`6c& z2QV)^KbfIMiCATc(2Eb@f86nPPYy`z`b5&pw4WC0h>V(W9H=^R7Ityz$Z0kiM3N6r zO0etf0S`mk&C-2#9u?})`hItH{VrW;wOj25E(I!@Zu?wk>1vt#v~N4q*xgBcJkzou zy^XWiq08;dSJU>jbom;!uXnEAc(1+OZa21+4{6^i;|mq6L-5U=9-*!7-Pzfv_t$pr z^lz>8Kib&qtz)FyYpv~Ue}H8sFQI(eXEo{2)~!36d$%^%|95_eOp%(RvEAKXKS^jA zd8}1eD(xRlK{oJ%a0$X`bCZT+RKbYX>-FWzhk{@hxZ={yiKE&z_Gl(@E)+f0XID7Cpn zThWY#aF~U$l#Z})jH8ot=1}#SGRLt7?DTLPTJ$;Ne#}%j@fJff>@1g&%gS81Xu^ZW zw#*jZ!tj*=;~JRE5A;C+(VNw!#g;i&<^n!ogYyP=IU$_QA&XqfDZ4{-u|SRJp@kJh zvbYqi;ir*qwX1ky6yfn5CrUXo8YvDKR~7}zajgyxTl6u;tjTaVk%d9u9>(Yki}7%? z=r7o<+Da_P!#c%laGgagiKqi?Jb@2PEJ6y4#cfS%0fgQ0SWS42(qSstF!B-GnKQ^d z)CZYg7!Qw<)f3~1LY=amSOXA{qMvph5XYd(wNXhI|4?*&KB{_Fr4yFb6q?keqhrOj z(TPyA*?(Hmc5SJP2V?1jo*`9`By0E zEIK~vi^2=JCEH}R%7snR$Els;80BilMyW|0s5-JL*{lfoS+uKIdRQkWRyv%L?_Z3~ B&>8>$ delta 352 zcmXxgI|{-;5P;!{iALiCAFWoRL\n" "Language-Team: LANGUAGE \n" @@ -17,55 +17,81 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Vertegenwoordigt een blogpostmodel. De klasse Post definieert de structuur " +"en het gedrag van een blogbericht. Ze bevat attributen voor auteur, titel, " +"inhoud, optionele bestandsbijlage, slug en geassocieerde tags. De klasse " +"dwingt beperkingen af zoals het vereisen van inhoud of een bestandsbijlage, " +"maar niet beide tegelijk. Het ondersteunt ook het automatisch genereren van " +"slugs op basis van de titel." + +#: blog/models.py:23 msgid "post title" msgstr "Titel van de post" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Titel" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "is statische pagina" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Is dit een bericht voor een pagina met een statische URL (bijv. " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Plaats" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Berichten" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Markdown-bestanden worden niet ondersteund - gebruik in plaats daarvan " "markdown-inhoud!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds " -"exclusief" +"er moet een markdown-bestand of markdown-inhoud worden geleverd - wederzijds" +" exclusief" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "interne tagidentifier voor de posttag" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tag naam" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Gebruiksvriendelijke naam voor de posttag" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Tag weergavenaam" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Post tag" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Post tags" diff --git a/blog/locale/no_NO/LC_MESSAGES/django.mo b/blog/locale/no_NO/LC_MESSAGES/django.mo index 4006ecbcf251b9c4c04aa7070cd93b18f43e7cb5..c686923532c2068a5828dadcf0eb3feeb16cea83 100644 GIT binary patch literal 2331 zcmah}&u<$=6kbY!Vt$oMhzmlmLP)9bx=yQBtxF0`npQ4J6H+G<5{Hhx&+DnzGt11Z zTZ6dMD-z<`1LYs!!aeE<_y;&}ICgJhbOZEOIz$U(b0loqJ z2Y3s30?w`i?*Oqi`4%YtzsKto@DWgQ{t1XJ$rGUD{Tont{s|O*e*xbI{tZOJ$x9yb2lM1bjMp$AMSLXBWAnMdD@W$Z4wsHSo8U=Nzpy!#)(4u{jEffa zMoioCJt&m-l<`m-_7t$}gR2Iia!kr()aQ|!YU{`jkNRm*H;^`iqROyMh2V6*3YZRI zs;V%uu1P_Mf}1q3CV)qiY#FpQs-U4R;5`I27)|0IUsQQB#seEW&?<07LFK+?T9af0 z=L5umLy%Nja`V+-M9P!nFDmV{$%!?xaEquUe4Y+S;7Y~@>f10PuP0Rzlwn)>Viq$~ zg|~2Bmez@WRj?Bk^nipX%!nUARj;R<$f+gBlAVYKIS95U=%Ge_BD6$}r;2}xh8Q8TELG0( z8Af=i+9I9{$sf88fflB_I~%mbt-M8d&yKh#&!RdI+Rg5s`6xM{E$0PKCGcszzaiN|>D@1YW&}lXqM3NuR zO0ezhJsyO#o27f~JWi-X>wDeR^*eOF)o!&LxD+_ibkpZLOINGhr#;)D#`ada!&5CA z((9Dx^x@jp z?cTMu-p4m~ch<4e-D$0DZC=GTlUGna?XjA4Xye-Lo4eO;uK%xn2Xd#zHa5GP>xT&~ zBagNEN~OJ739^A7gtHJ%n=3RJDd#z??DlS?mk#ZO^AG~An}N-6OFDF^uR~+IsGKU& z8`e!cqLuN}ubjI=^>k&)(CHOgK69mU*ihJ^{20ZL^31g{1?RbseFcq0no2sBrUHw) zt%$iam9aDxL+C_P?Z!OWe~h+(TT>9q=%}+6UB?f2=8-Kj>|XR2+=O`ODCQy7xb885 zi>6qMag(O1$WbOC$nBeQChVH^#YJR98=D!nX1K2^&)K!;lR4Yb{$rDk7}bxfnS-h~ zP)dTx<>9gCNy!DsAbDXv4@q1U*n%7m0}_&>>Hd$nF%t$UbUD)FF^gl|KwL8H@M;ot zrt>;oANGHil%S8t=0(r(}_gVXCi&a1u9{Pt^)zsv=YQv+}IRU=DZG;7IcN0 zEz2CeA*K8t(i9Se?p;)%XfjS#=rCJN3uIx6^30lw;v)G$fL4nNRy_2e4Z3*15}q)H z7cAoqwV?>Lkry`cjfM<)i-&H~1GQKSlSKat{YairFFEob^e5SPqF)*s=KTCH3yE-% JT85MK{R_rS8+HHy diff --git a/blog/locale/no_NO/LC_MESSAGES/django.po b/blog/locale/no_NO/LC_MESSAGES/django.po index 19503bc6..552fe912 100644 --- a/blog/locale/no_NO/LC_MESSAGES/django.po +++ b/blog/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,52 +17,77 @@ msgstr "" msgid "blog" msgstr "Blogg" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Representerer en blogginnleggsmodell. Post-klassen definerer strukturen og " +"virkemåten til et blogginnlegg. Den inneholder attributter for forfatter, " +"tittel, innhold, valgfritt filvedlegg, slug og tilknyttede tagger. Klassen " +"håndhever begrensninger, for eksempel at enten innhold eller et filvedlegg " +"må være med, men ikke begge deler samtidig. Den støtter også automatisk " +"generering av slug basert på tittelen." + +#: blog/models.py:23 msgid "post title" msgstr "Innleggets tittel" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Title" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "er statisk side" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"er dette et innlegg for en side med statisk URL (f.eks. `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Post" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Innlegg" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown-filer støttes ikke - bruk markdown-innhold i stedet!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-innhold må oppgis - gjensidig utelukkende" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "intern tagg-identifikator for innleggstaggen" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tagg navn" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Brukervennlig navn for innleggstaggen" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Post tag" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tagger for innlegg" diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.mo b/blog/locale/pl_PL/LC_MESSAGES/django.mo index 50d847f3e12741bfbd0fcf5f6b1318d72198bb77..bf84bf3caf509ff6c602bd78d6377080e777593e 100644 GIT binary patch literal 2339 zcmah~OK%)S5FSE!nO8tUTo9@V4vym4Y!W3(HW-MF6FK;WvknU4klvZz-QJz;9=dxx znUT0evLHWzLu82)2kwXqLP7#t;=nK9zzOc$xNzXBp0yJaBu47}`cd8W)z{UvzrB3) ziwNIKXs@Ath4w1i+++B`_c`!3+Fi6|jE_7XMMr@vz**o2z!!iuZ~=H1xCs0O$acr@ z^EB`k;4{G2fiu8a;1j^Jz+=FRK(@O!oxcuz1LK>(kKy}M;12LtY`Tg0TTeCTe+PUM z;~#*``*+|f@NeK6@EQ)q*61FP{eKC34*2yHzXdXnAAubI&p_t)2k=SYpTLvAzkqNb zbb1lUG4naRm(OJ%ypKP)4zck5=g}ZV_&ClZ(>}wq5A>r=nOo_k_KpPgGBcpuI8PIk z%B)4*p`;BSCz)`LQrTBpI`Wuy-WG{3tR$gR>dB$lR>qR)KX^`ymOUw*WJQW?!h5TF zg-5p!Q&IS#v2)~=&*U5>Mtks>Ba?e&w8*HhGMw(cNQRTJ;<92e7yN;ZNtEz1B`*f9 zVcL+C8iyzFfdfHOD2~k)$&iF2D?cfeReC^DAqsoom6*@N4hdXI8&5sshvd|x$h^?f z6fUbmWFm70N9Vb*tY6{HM0k}D^Q3{)(qd>d^@IaabXd3$ZYvTr5q6xKQa5fv;BaCp z1x*S_-;EE?n>*lMr(3h}Yf>^0mf)*=Nl zd|;W2f#jhd;zu+V;a-SWsDwZVrdyjUG%H(!7Tr2Elv#cX*#XzKx^?26=#Vzw7fwP- zuxL|Vz`Bwi%nK(UjZoo=q(~#C7k-%kVaH8-oFJj=A`UNAF3&_oT1;e^Xga|PUToaA zO6n9M@xr4LY*;griI11l_=dC&H`Jk}8_Nqz*XeAl-D=O^QQ$`7RX0#+yig2W+%+AV z*;tP^<+kDt@q5U<4xMSAITyFj$EVLz`$Fg3#gpyR?e@%ya6ax@p6I2L?y(-`U$qYOThCO5%hQi9!Hsj6LDSVq{9Sw^IvUp%fJiDqgo>StF*uIIn6NGef$`KoWkv7bUZ=hUsv1XTdIgPSstpd? z-^EOe)_V>i3|J2f-=pg}AZiO|Yai6OCO(H7A1bY*|f6r2OABp-_Hw z{-4!n0~e@h^`Mpp*6?QVkVYR;t;e94>4_efvpjwM2%c8X~W<{o3qYYbEBLRyLGxP9c N`~z@GHk%)i?;oos| delta 352 zcmXZYy$-=p6u|M*FRl8Bv?~)sMdB3<77SfX5`$;3nYtKljl|4gv4~w_CK02>BiJPd z|D!$W>F?f~d+#~zE;#tfE3nr>RLMHIB17^^Y77jKAr8^T6eHYVA20d3V~TjpeJo;# zJ~q(72y56y-Pg<36B#gQvJm5x%jP&?ez&rMZK}5PAjUXG9@+BJLVGOZG53sG@QV6D z57b89Silc G@}55rA{%S~ diff --git a/blog/locale/pl_PL/LC_MESSAGES/django.po b/blog/locale/pl_PL/LC_MESSAGES/django.po index 694d39e8..5d0e8b65 100644 --- a/blog/locale/pl_PL/LC_MESSAGES/django.po +++ b/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,54 +17,80 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Reprezentuje model wpisu na blogu. Klasa Post definiuje strukturę i " +"zachowanie wpisu na blogu. Zawiera atrybuty autora, tytułu, treści, " +"opcjonalnego załącznika w postaci pliku, slug i powiązanych tagów. Klasa " +"wymusza ograniczenia, takie jak wymaganie treści lub załącznika pliku, ale " +"nie obu jednocześnie. Obsługuje również automatyczne generowanie slug na " +"podstawie tytułu." + +#: blog/models.py:23 msgid "post title" msgstr "Tytuł postu" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Tytuł" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "jest stroną statyczną" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Czy jest to post dla strony ze statycznym adresem URL (np. " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Post" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Posty" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Pliki Markdown nie są obsługiwane - zamiast tego użyj zawartości Markdown!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "należy dostarczyć plik markdown lub zawartość markdown - wzajemnie się " "wykluczające" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "wewnętrzny identyfikator tagu posta" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Nazwa tagu" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Przyjazna dla użytkownika nazwa tagu posta" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Tag posta" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tagi postów" diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.mo b/blog/locale/pt_BR/LC_MESSAGES/django.mo index bfce8de97401d1b3f79ad1175e244ddc797e44e8..4b3152a1367f68f4914a9f460cca460064ca7862 100644 GIT binary patch literal 2412 zcmah}O>Y}T7+y*#U?`L?0TM!Q#U&M9*Gbi?bqJ6ICko1kNu3BJ4ju1~?Sb8y?aZv3 zMB+}bNZhGFLOpOqNFX63U%7GPz=@y0fg{g5yKzE`#7eWze7+ygyz~6={Mj!fe9xi1 zhV~8G%V^C<@Wb~x@Br;D+6KmF9*v^2z)j#B@B`p8z$4%a@Gfu__$!e2UBK@N;7hxPYMy`sq3Q}qq zPv8Rv5u{L@n=6ws2}f4mE|pb!L{cFOd+e1so(CNgVkK=n4U8X?Q+b(rp`|HZb{H}f znKLk56vi@tr8l|oDj|-OMp8?Qq0uxD4uPV>#D#QQk)T}IPg8S8S8fr&Y@()u@)Fb! zBo)?7R0Kfeyl6?bT2rKPH;JhFis2q(FubQ5Iq( zdFaRZiE2l<7vdGV1A>mX?(J^UoNSF+bnEh1X2oSx2VC33TbJI6W?}Pv!4gV>NvnB5 z)Q8d|^3utNGgP=DDbk3;3qOv3)^T-@3nX-1#ObBV6`43BEpizqs!rGiFE$=pC3Omt zc;R6Rde(d*6CZD+@xHVUH`Jl-{>Do8CS7T@TkQrO1#UFnawC<-E9J<=ebb>vZztZB z6U7JO_fUHsT4*m^joa7a`D@g^-nn|?&Gvk|-Pjb)$9*fb%Y-);#@Bat32kL>duN~C zTHV?1FR%9BUEAC3VrFBvwYszQHje303FhOz6nTd>m$%pVme;%gyT3z)j|aA~wXxMb zNoXE1Lvm7X_UN+F~547w7pgvbIdW^JQjgb(#K{qKhYd z5X=b+F_;(#P7(yCSv_1lQAi5ZB1lXspf0m;RbEWLmyi(zs;1wf@7Q*3@E+Aj)q28y z$dpXLgU*_G1CI3cYeOO*AljL%gfwM~I49&hnBLE!rqap;Vp}p1lBQolR;++yKF@kH zy$8V&OmGk#gc8&SFYq|`R>WZ(r&?Bu7b3)=+1pL!1STrM&@xd-pcWfuU(V#lL@PmV zYK2Ke3W0$kewUR7nfe046ju1gP}O-fy$?d5Gt+w`rNdoU!AD)^1Rbx|yDKB7_j78j zL!dsKGc*TM5SYvhzTy8+rX5zJaL4W>)4;uB0xMRLfve>y=x(59#*55pB9B;doVghF zI6513y}DgWA84PY*XN=+oo~OYJxVKW4IK2!L5BOPDks`DkS82L?F_h@5EC|ot$GC{ c)t;i-*zCw~dM{BKm0o4)s4j@A@E_v+A4+-kB>(^b delta 353 zcmXxgzYoDs5Ww-P7F9nYYLV!Gg~h-hV6c>gm`rAy#b)Ygu{9F^fz8stK&%prQOpLj z$>4j`C6~{;_g?N@`z+m@;9jz}LKMgvG-Svs4n5S#bb6gwAJMu7GLj1O$Q8f5?g diff --git a/blog/locale/pt_BR/LC_MESSAGES/django.po b/blog/locale/pt_BR/LC_MESSAGES/django.po index 5574452f..1a06de01 100644 --- a/blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,53 +17,80 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Representa um modelo de post de blog. A classe Post define a estrutura e o " +"comportamento de um post de blog. Ela inclui atributos para autor, título, " +"conteúdo, anexo de arquivo opcional, slug e tags associadas. A classe impõe " +"restrições, como exigir conteúdo ou um anexo de arquivo, mas não ambos " +"simultaneamente. Ela também oferece suporte à geração automática de slug com" +" base no título." + +#: blog/models.py:23 msgid "post title" msgstr "Título da postagem" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Título" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "é uma página estática" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Essa é uma postagem para uma página com URL estático (por exemplo, " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Postar" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Publicações" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -"Os arquivos markdown não são suportados - use conteúdo markdown em vez disso!" +"Os arquivos markdown não são suportados - use conteúdo markdown em vez " +"disso!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "um arquivo ou conteúdo de markdown deve ser fornecido - mutuamente exclusivo" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "identificador de tag interno para a tag de postagem" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Nome da etiqueta" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Nome de fácil utilização para a tag de postagem" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Nome de exibição da tag" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Etiqueta de postagem" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Tags de postagem" diff --git a/blog/locale/ro_RO/LC_MESSAGES/django.mo b/blog/locale/ro_RO/LC_MESSAGES/django.mo index 4b74e90f8925075fec06e5c8fe1afb1777a3b208..ce203fd596c09b8463719a2ae9e68726b283338f 100644 GIT binary patch literal 2411 zcmah}%WfP+6m3EXFc6X;AvOrz2q8IQdOS`@l#DT8JLAa6uQ=mKNGwv*T{BamyK1P1 zV_O0tWkWuIg~blRmY+x#Ua)`#ELgDO8(4F0b&tnNK(thS>RsoaTXp_?{q(m9z6&UC zq5OdICQ9=;{P2AP+(UVUvWoVp=ab|#a1A&EybXK}cmP}iJ_0TSe+Kfr^Z304d;|D0 z@NHlNI0JkEcm;SKcmv4uKB@cf0N+9TQ{ZPf`%B=Dz(25P3;kceSndBSu!HvRK<0e` zoAiK}fVY8P0kJgs1;{*q19Gf?0nY*d2A%<)0XbfO7RdA71#r)RsG;m9bl>m zeq?Nuyz+%?Qf9OVk0zP1S4NA12CBgB-ivHh#t~P9VKbfwHYQWT%bdIzx{7HC2c(QjUSOyWhlJR(gauR$H+wC z47MJRjb;6UH>L0@Bj!m%sij5JXzB|GqNuQNG2B)ns1)||+&s|Lu^@2VQADPu=fiL-EuO$Syl8-S6YV*b*OuHb*X!YuC&^%b_0(B8BN#SQ03`T7`n7)I@H+OOtUwt? z&>Z4euAWrd+aH6hmwSE|!YMsZ*+^I?{lZRfCA~hK$D9Wcu&XnZ>Eh>|p7BdOO#l&b}8I{dohK5VUhgthf zh(2@lozekLGf+4Lk3@KJbSONW2P14f&FTp=1&Ieel3*rk$C)r!&9h5iqst3_7T%i8Lw49vaNczJv!(tfxgcnTLcNQosna zOpaOS%4+za+Jn$1VhAZ86_pYPB3ci3v=VP+KY-LASgj5aI#M-J5#Dt-?3)b zq{(F?RrXIvGFf~v*<%0dR#%0?JkjKqLmx1YC(Pmv\n" "Language-Team: LANGUAGE \n" @@ -17,54 +17,81 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Reprezintă un model de postare pe blog. Clasa Post definește structura și " +"comportamentul unei postări pe blog. Aceasta include atribute pentru autor, " +"titlu, conținut, fișier atașat opțional, slug și etichete asociate. Clasa " +"impune constrângeri, cum ar fi solicitarea fie a conținutului, fie a unui " +"fișier atașat, dar nu ambele simultan. De asemenea, acceptă generarea " +"automată a slug-ului pe baza titlului." + +#: blog/models.py:23 msgid "post title" msgstr "Titlul postului" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Titlul" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "este o pagină statică" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"este aceasta o postare pentru o pagină cu URL static (de exemplu " +"`/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Post" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Mesaje" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" -"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut Markdown!" +"Fișierele Markdown nu sunt acceptate - utilizați în schimb conținut " +"Markdown!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "trebuie furnizat un fișier markdown sau conținut markdown - se exclud " "reciproc" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "identificator intern de etichetă pentru eticheta postului" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Nume etichetă" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Nume ușor de utilizat pentru eticheta postului" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Nume afișare etichetă" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Etichetă post" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Etichete poștale" diff --git a/blog/locale/ru_RU/LC_MESSAGES/django.mo b/blog/locale/ru_RU/LC_MESSAGES/django.mo index 07bc06a93257fc1d269f3d3700c58b54ad8e1ebf..3227df547eb5c99cc83976b1147c79d18fc9bace 100644 GIT binary patch literal 3078 zcmah~U2hvj6kSTohxsZEQs;ETYofPKJuU_bCL zAjj>+&ojVRfzJZp0H%Olz&*gjz`elZK#u#cJw6V66Yrk@KSk}Yfq(C^tbefR4~*YN zFvow4q{Bb~OauP}o&!Dr{tlc(F^>Be$Qt)N2QI*Uz_)-lkok-QyMUhoUjtqRGOu5N z+^hkmj8@LW*VDMU=2N&|zzr+R#rYs%^FqqbH72Wp45g<+5|nrS z5>@?BQN=GxH%+;+q)~n^xFQUxD5o4xhNLhYsvs(;D3Bz)BIRXSOgnx+{?yhyX&O}I zcm+2qVwq4XaPpDD;}k+gq{@EKP0CTO?52Y6De&kfzp5PH6E00TF0v~n3gwEK3EimF zZR&xIUvPwyMN*;^CQK8O(nInBY9Jv<3Wv3YQK3vCq(FWdIf3JqNIFmvY*Z!Y^Kd}| zSMq#Cd0&+&bSjangeUzdbZ3k*;f6j^SF3)&{zb~K2;~%rc~VJwGQg|vQC@@~iU&5% z$W2>g8 z4R#P>J>^U}(8oq|RkN#@vmBVA49lu0Nq$vj{D>sN>or6Iep%Y_6)FsoUG@U(I zmTvVRx&x(ynX?Dpvo>k-ejyWDf=z4t0@gE9fq4|lM-@8QA}NX%(=$KJfAb-1KXHSY z$IxPVMJKGfVun0Xk!B!yFj1%y*i(Tcy&_EFiAOCM4gAk#LD_>vdr}4=b|^~&lY@N& z<8(NkNoP_x6xdOFI4n6uyDut*cFxaIYIMXNlhY0_us=ZWW$94n&=EUx)b2S-nPb@_ z$KTHMWHPBC5h^2WCu}dcyM^2Bd7;D`jaDN=Vq!PtK@lg5XL#) z2`ZFD5K7fMkvnA{>%=kVDHu5575pMjNtTY~9hDk&qd>U!DL<%$S@NppHS9fff|AGH zE|2#2QqO@CDNFwxU(ijx6wk(Ux~>~~C9dgaJV$y}uj?gDt;FAwzKgm0x)smr7U>4* z1-*jlMcqu3{t?f0te;K3Js7{AEAuoasJ-8(bdunr`Xl<15|N zYpAZ5!RbbP6_gCoI;Y0s1tgw}uMx|Dm~{-+yOV^AsKbPLEyf_jXhXyuM5A(CL*yD* ztRqd0<~66L|Y36UGq z+vPCNEpkv5g5d{q#uK(`$!s4RiA`en*q4SW4I+5MJB0BTVGT=yQ^^i5@%|$64w!A~ zYi|;GvDHQ+7%yWFZxA;YSI3%qds6wNx1aj=DYlxZPs zja${y-=PF{+QQ75Xt=^xgToN9sY^*Ed=2J z@tJM#M(~kM`k_g~8-KS*wR0cA);VaY;m-;}X3fV0A1i$qC*d9x8NYcu*#^_jt@yH` zzNH_{v3N}R{rEyAJ!9!#rM8 zQTzCa0s7cP7du$N9_qP%x*y4qMT?CwPG~m89reLZ4}Ng#3-tmwctmY5qiYpE@d>}N zja$@<|4|1$VI8epIzR(osk>-o#43vi)W$kJ?+DLte}#FZNb1)Y$a^rK\n" "Language-Team: LANGUAGE \n" @@ -17,55 +17,80 @@ msgstr "" msgid "blog" msgstr "Блог" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Представляет модель записи в блоге. Класс Post определяет структуру и " +"поведение записи в блоге. Он включает атрибуты автора, заголовка, " +"содержания, необязательного вложения файла, slug и связанные с ним теги. " +"Класс накладывает ограничения, например, требует либо содержимое, либо " +"вложение файла, но не то и другое одновременно. Он также поддерживает " +"автоматическую генерацию slug на основе заголовка." + +#: blog/models.py:23 msgid "post title" msgstr "Заголовок сообщения" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Название" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "это статическая страница" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Это сообщение для страницы со статическим URL (например, `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Пост" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Посты" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Файлы в формате Markdown не поддерживаются - используйте вместо них " "содержимое в формате Markdown!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "необходимо предоставить файл разметки или содержимое разметки - " "взаимоисключающие варианты" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "внутренний идентификатор тега для тега post" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Название тега" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Удобное для пользователя название тега поста" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Отображаемое имя тега" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Тэг поста" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Тэги постов" diff --git a/blog/locale/sv_SE/LC_MESSAGES/django.mo b/blog/locale/sv_SE/LC_MESSAGES/django.mo index d95aba43276b0fbd177112a194d1d3687b56c03a..3ec18b0ec6294d6d8a83de37745bb16652883473 100644 GIT binary patch literal 2355 zcmah~%WfP+6m3EXVR(g?vO(xZY#f-Lj1whFCK#|CCmOJ0H;0ciJe+FV}@(1uu;9o$t`y0soPT}P};8`Ht$2`3Xmk)9~>9|_&jV+&S1QZfmFmF`#UwAGraiNJlT~aC%rVmlc2t~1&yo^RN7qX7WIab zcKAKh!h6c)KpE*NVA%&(WubDCgvqHdhhnU(BRhEfoECKhDU<0c$2JjyQ~fGnI)JID z!qB=V1r@YxQf5s6k0#ksP}T@d1Eq0#2qGJn@r&10(Tx7U#%4+cnNtvjubI{)rNQAD zeBeNk6pCZ>RW>By$;q!P<&-H%Dn#LCUWxhq+aZA~85^i?!;rixD;{l`iX*W;rOXpFc4sG1;u5H|-E3I~`-N28>0r z-jLox?{(;M`|{PaeJx$SM(yjJt2f?nFSpx`P2oe@bHaEnf^|6j&h{>0tnJ<1zE2;l zZ{O{$uJ=B^y|=r8mF{k9eS7OeY%@iL%%?pm$_{O=-o3N8dS~N*?K|Yhsh5qd?$*X4 zpk>6dUSFxScQ^vsAP>SNBu<%|lnsURGOXNSBThOuC#L}|Q(qhQs+V*9TC?}dIo*@J71X_M^&Mg=!W8`phtTlRmrZcrYZyKGFzC&#%UFUp{DRfHCCq&`ee zaztsfeLp##tB&7~#G~rSsBo-05Fi@CD#mSE3HHyfYYN9x7W1Wf7O9*Z<7U<=K>Q+x z2?0%Ma#DKfBOzif*A+xDm&qE}WU50kTMHFpNr<(ZmL39BfM_x~;$lOLn7qnGTtK0N zAg=P%dRlfw4ih9NpYMsXRA>1=bZKj}b9+x4`Db_Y^0Rv(JhD!1$tw9JHAY4xzyPxtVhayA#A~{5XGHSUE*7wg zE;i7{7FMu}+SgC^H!@<;WMhIeUbe(3b!;UE+uYir?%@FEsDm7N=tU>gfiI{R+|a=X z*6@ki_eLG$gKabvM#ikt&_g\n" "Language-Team: LANGUAGE \n" @@ -17,53 +17,78 @@ msgstr "" msgid "blog" msgstr "Blogg" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Representerar en modell för blogginlägg. Klassen Post definierar strukturen " +"och beteendet för ett blogginlägg. Den innehåller attribut för författare, " +"titel, innehåll, valfri filbilaga, slug och tillhörande taggar. Klassen " +"upprätthåller begränsningar som t.ex. att antingen innehåll eller en " +"filbilaga krävs, men inte båda samtidigt. Den stöder också automatisk " +"sluggenerering baserat på titeln." + +#: blog/models.py:23 msgid "post title" msgstr "Inläggets titel" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Titel" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "är statisk sida" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"är detta ett inlägg för en sida med statisk URL (t.ex. `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "Post" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Inlägg" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "Markdown-filer stöds inte - använd markdown-innehåll istället!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "en markdown-fil eller markdown-innehåll måste tillhandahållas - ömsesidigt " "uteslutande" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "intern taggidentifierare för inläggstaggen" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tagg namn" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Användarvänligt namn för inläggstaggen" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Taggens visningsnamn" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Post tagg" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Taggar för inlägg" diff --git a/blog/locale/th_TH/LC_MESSAGES/django.mo b/blog/locale/th_TH/LC_MESSAGES/django.mo index dd885c5e36e1cb4f5282787ec844745ae99c88f9..6aab37fd2bf891c9cda6f0d00e875fe2f0aec82e 100644 GIT binary patch literal 3556 zcmb7`-)|IE6vs!zU-cK75Fa$;5=|`HDJ=v7#i~#X)=*kYOJdZ7>F(|B=3%)a_!OnlTAAI$s_{sDf@o!xG?RFq9;&i!%jIp6R1oICK> zldI1;{GQ->hUYTRQ#?KQ@Zxt8dzj}G&j|BX_d3pM>|Sg)_D$?#*dy3o*i+ac>~C1{ zTf^%?>{{$Y*mc-0Y&Z5k>}Kp5>~^g9z0q9XkA0T;TiAEV{UP>uV*bgYRm{I5*yHTq zAlSRupRvzl)x(Z+2Kzep7wjKc@%#J{$9Woi4f_K2*XI0htn9CO)N!7}D(qV9Fm@gG zZLE(yf+elhN&JN~M=b~81w6|O<2=A4T<+)Lm;-G46P~M@V=+K$|0Z-j)`<>HqC7Pn zL={z!5~FHSSqHspvZ~d%%u9inB&w`u{7@&#u$-7UEtxdd$_vYCT35YUKZ;c}voubx z8ZpWbOF>%Zm}gAvPp5|A46a^ks!`mdjBf(nqe@X|z|o_ky78mX3)GAs5ZxHBRIS;a zBuFbgHXmrBlJ6N^R>rF&1=0ef4hdc&2LS=;`NAzpOI771D%KyQe(Z-8rF~e$t*lD$ zEKjJws=~;q>Bv-7;@8r^c%hEcB$%_zyda4PU9U&6=$D$P<{7`F1gEO#P{&N8P)&OY zKpBW|mTs@(shStRUycriMOpwXE;OZ3wG`>6wW`O_tY0RC%aTdGAedA7Fsdg0tahYo z4lH#nq9KREH#Gi?4?huFvf8S$=lF!M^w9YUa%>(s zNrTv7;t0L6pVR|yPK91g+l69ay~q-~GqJD3G9t;w?GlW~(R;dN+>x?-K*tFc8c@Rr zMs^MFSDSnLdi%P#6jan5O)7rb-IZ1ncQP7KUE^c!gr4=~fcqM~H=s84ZQA1YZFT#% zs=jRlTeiR0*WcIIwbx6GI~jXn5_l$x3BG4+LhZBgWJ43{Qr{@<86dAzH z?sdESS)Mf{LgOO~<)*~R=6hg$I?rz94TQU9H#yOoW+&K}18Bt>>B&ma8?uZLUt0Z; z6ObaO>bA=ZHX4Y?jJP-ogbh8#$Eqz=Q9jY1^Dwz7=Oi6dI~IsgI@U^k0<=U!XQ`3R zi65|*=gJ$$g_mqC9xghA(11Bx(87b&d7`3P!45DBHv0;!TY}!QQmw$>>O*-5S~LYH z&MsdR0TJsb>jooHf%GsZVj&&WI1diql;hJTCei4+1qw=hC11Io zV-5jUP?22RJ#ZJdh@zqHRZ-V1F2=uMW&ce+v;DIu~sqPTJ;_yMSDfB6{;;f}&^> zaI;Z}-Vteqv>oA^fh^~nO8%X<9Et*Uh{q?I97SPJv9r6I zvLQ3;&@7nRa*De6XL-a1#;j?h3hAXO(&96uN4hfgfZNO%cDF9U} zDgz~8QDWY3yKq~Wj*t2sQ;?D%Gz@o(YA?N;thaM7*^ow*js?+@RS^WC5QGj9c{{gT ZebiP^($Qt@#%9Wda+alB7u1Bum~zt7}Ah*uwz2Si>!L@Zk4@mPmws6dlZB z6iXPy8m6&<`d;hTUrLung~kAf95zD>FSbaE{*|we@Qx>JbDH)eA&~;+v5rlDKSq7N zz$&gVhdV6e5hwUUBYjqWg;6Kd>2+eBfBy>eNP_6?\n" "Language-Team: LANGUAGE \n" @@ -17,51 +17,78 @@ msgstr "" msgid "blog" msgstr "บล็อก" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"แทนแบบจำลองของโพสต์ในบล็อก คลาส Post " +"กำหนดโครงสร้างและพฤติกรรมของโพสต์ในบล็อก " +"ประกอบด้วยแอตทริบิวต์สำหรับผู้เขียน, ชื่อเรื่อง, เนื้อหา, ไฟล์แนบ " +"(ไม่บังคับ), slug และแท็กที่เกี่ยวข้อง คลาสนี้บังคับใช้ข้อจำกัด เช่น " +"ต้องมีเนื้อหาหรือไฟล์แนบอย่างใดอย่างหนึ่ง " +"แต่ไม่สามารถมีทั้งสองอย่างพร้อมกันได้ นอกจากนี้ยังรองรับการสร้าง slug " +"โดยอัตโนมัติจากชื่อเรื่อง" + +#: blog/models.py:23 msgid "post title" msgstr "ชื่อโพสต์" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "ชื่อเรื่อง" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "เป็นหน้าคงที่" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "นี่คือโพสต์สำหรับหน้าที่มี URL แบบคงที่ (เช่น `/help/delivery`)?" + +#: blog/models.py:76 msgid "post" msgstr "โพสต์" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "โพสต์" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "ไฟล์มาร์กดาวน์ยังไม่รองรับในตอนนี้ - กรุณาใช้เนื้อหาแบบมาร์กดาวน์แทน!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" -msgstr "ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - ไม่สามารถใช้ร่วมกันได้" +msgstr "" +"ไฟล์มาร์กดาวน์หรือเนื้อหาแบบมาร์กดาวน์ต้องได้รับการจัดเตรียมไว้ - " +"ไม่สามารถใช้ร่วมกันได้" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กโพสต์" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "ชื่อวัน" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "ชื่อที่ใช้งานได้ง่ายสำหรับแท็กโพสต์" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "โพสต์แท็ก" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "ป้ายกำกับโพสต์" diff --git a/blog/locale/tr_TR/LC_MESSAGES/django.mo b/blog/locale/tr_TR/LC_MESSAGES/django.mo index cb3e00f4f228e22e69bfc680708c24f38612a6c1..078eb8563a1fab449a10780666793b15f6d690aa 100644 GIT binary patch literal 2405 zcmah~&u<$=6kbZp4+EuuDh?p@Dv(Hp*L7O8YF$E!gBt}UO-P(dl{j>~JGQ6Zopons z(`+Q}^bg>Od_m&uOHbUgIf1xvf&>2n{{!EfwVjF{Sb6uGogeRg?|W~b|9L^$&o1z{f!La{_z|_$%-|;GaN_^B*97!8wq-2s{sb1NaG$=bOOKfVY5f?{#_` z$T7c(n{8vs$I5Z>1uFjRD?s)MDg4F!&dkOP>}PT9%CV7FYG+AMFUbZp&a9&}i)GTF z?oiSWzekC%mSWjgT3T|Lw$9{{%Z((VW9rGFI8d3PtpB{725mS}I!f{w$Aoi6^>T+{ zA6rH4hMB38Q!bHpiZboMqfXh_sZ5K6`YM5S=R`D2{fbTULEZZUn=Deo$(WoN*otXI zQfe5F-~$FhQYeni=FyOZB_ki_$|yY`sSt&kdnM-cUxx&)q%%jo%niw^G*6t+GRtjJ z_{cDqK@8_v zj>SOos~h4WsvSNr#4Gd!0?oJX?{3nPYz!Lo@XAmo<145RxHiSZ%XfkWZO#`gp(I$e znJ!>mNC)P*l`lr9kRmDKfa&=M^Ir_?Y{UiPhc@8wVr9pPC`gM``iW}bcfpGZ`$kC} zLnK~!QGy+lJ(7_NH{$TVG!_|ZQRn_fyR%2v8qG$thK~Xn4Y%w-#bG-i*szXQn)#TaCrJakteoYJ=`8VX~jTiNg44R46bD<_I93nny(l+(DJ8hphtfFEZQ6HpoqbkODwG|$^iK{eAa7Q<6n z7x@CS$j2G@W(4M<=nM7{v~#3|JJg8Kc0MieR|6AcUm$)LEge5I8W}})UT8-%uN>!s zP^#_(Tk~e?gNC3i%}f`asse4YK!y-tu5*+fvaFx$SErhc@&u9~`LjQH9ba=y*c|_&r6yKlKI_NrSyeA=%^l9-owI_dT!b!% GiQr$S3lus4 delta 352 zcmXxgy$-=p6u|M@4@%L95(|k$Bt8^{P z|5J66lixiz?K!7?\n" "Language-Team: LANGUAGE \n" @@ -17,54 +17,81 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Bir blog yazısı modelini temsil eder. Post sınıfı, bir blog gönderisinin " +"yapısını ve davranışını tanımlar. Yazar, başlık, içerik, isteğe bağlı dosya " +"eki, slug ve ilişkili etiketler için öznitelikler içerir. Sınıf, içerik veya" +" dosya eki gerektirme ancak her ikisini aynı anda gerektirmeme gibi " +"kısıtlamalar uygular. Ayrıca başlığa dayalı otomatik slug oluşturmayı da " +"destekler." + +#: blog/models.py:23 msgid "post title" msgstr "Gönderinin başlığı" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Başlık" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "statik sayfadır" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Bu, statik URL'ye sahip bir sayfa (örneğin `/help/delivery`) için bir " +"gönderi mi?" + +#: blog/models.py:76 msgid "post" msgstr "Posta" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Mesajlar" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Markdown dosyaları desteklenmiyor yer - bunun yerine markdown içeriği " "kullanın!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" -"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini dışlayan" +"bir markdown dosyası veya markdown içeriği sağlanmalıdır - birbirini " +"dışlayan" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "gönderi etiketi için dahili etiket tanımlayıcısı" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Etiket adı" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Gönderi etiketi için kullanıcı dostu ad" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Etiket görünen adı" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Mesaj etiketi" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Gönderi etiketleri" diff --git a/blog/locale/vi_VN/LC_MESSAGES/django.mo b/blog/locale/vi_VN/LC_MESSAGES/django.mo index d934047bb59edb100f084afc5b6a953433cc962e..7d305f9111d20fb22887589545d842b8cb927c6c 100644 GIT binary patch literal 2547 zcmah~U27aw7#?f=ieFU_Z=}4XHz{Veo0QgeYg(I_)=0igHwDp)o}D?FIcE0EcIM2s zTkt{(Y7xOAB1M#>vDAu%s1<4Uq8Af$C3q=#A?!c#dCyEfGzACFKIij2&-0x3oc;Ux z-CsEPoa?n zMX#W}ANVZr9iRtX05*Vs0G|X7VRP1aqQn^>>udmd{Bqg;5Xk(#Df@2&htd88i0y3* z-iI|mg~A#zWVP}-{y@!Yc@+3G3aqdn>)ch=8F=5#Z&tPvnM!R^64Z#|fLd{Cs2Te* zs!%p{n&k*o2g-W)>Nt zWt^o^$0`$18Y6V86({UpX5ywW$|L4Ufz&cVGuG4)DTt!N##y-)M^IBF3x0f27u$ls zW=ClSH8WV>kkm@zw(=3eMVHA$6m>{mf~%=&ONUR*fl8UMX|RJZR~t32ppT8_UG1r2 z%uz7ISe7jjNN$=CKcbjn&xLq|F2bOVsdKXv)GsSRh0Y%gWz;%|?7-GZ=lp?_&L(X> zFGNC0uxX_)VBL`h%(GPPRH$%7Quq$jvp>v#vyzrIP7qs79hT>-v=xaCY0;Fnqo~+f z*d=l26D73|lXzgK1v5$fp7e}6?z`t?lH!DFGd;}gdc++(Le-9*Da=?*ZsUnUcTfZzcWk*=64W*85!;lz+;(T zpZxobc=HbiNMjtKDa`>7r%?l==G_vo#5DMBnw7c!wY zl<9o2L-`WN>8<{Xca(QdASJ-#Vp-{MeT6#A0g7*B)CxfhDxqVG4TUk5L&6SDyd1$6 z!u&1(A(kl=y!;-T5zMO)TjKq88*Nbk5|;M5%ZRkPgtvwwFL-0mrd5)e+<3)GirYwU4!M@oHv7o>62U#QzOufAkXE)P9g3{tjPQ##nJ-&b zoD;slj{$>jX-Wg$6-Q}1x8;Fjqau+ZZ0)uVk&yWf92-n1t>p=J!P>R8E3Afd6!8pX z^D>^w51w64{q6h?yK=L(^X)5bKk3x%xoqkUHMRr8yi@_ChB*+sK1jDhZ>D3&UtK&E9%gU26mX*rtaesH|XLWi};LvW0~4zn%>t? z>lW%F!?-`gF7*NpnQ)3Dg}Rw;&z&Sm{VVJvIg\n" "Language-Team: LANGUAGE \n" @@ -17,54 +17,79 @@ msgstr "" msgid "blog" msgstr "Blog" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"Đại diện cho mô hình bài viết blog. Lớp Post định nghĩa cấu trúc và hành vi " +"của một bài viết blog. Nó bao gồm các thuộc tính cho tác giả, tiêu đề, nội " +"dung, tệp đính kèm tùy chọn, slug và các thẻ liên quan. Lớp này áp đặt các " +"ràng buộc như yêu cầu phải có nội dung hoặc tệp đính kèm nhưng không cả hai " +"cùng lúc. Nó cũng hỗ trợ tạo slug tự động dựa trên tiêu đề." + +#: blog/models.py:23 msgid "post title" msgstr "Tiêu đề bài đăng" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "Tiêu đề" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "là trang tĩnh" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "" +"Đây có phải là bài đăng cho một trang có URL tĩnh (ví dụ: `/help/delivery`) " +"không?" + +#: blog/models.py:76 msgid "post" msgstr "Bài đăng" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "Bài đăng" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "" "Tệp Markdown hiện chưa được hỗ trợ - hãy sử dụng nội dung Markdown thay thế!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "" "Phải cung cấp tệp Markdown hoặc nội dung Markdown - hai tùy chọn này là " "tương phản nhau." -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "Mã định danh thẻ nội bộ cho thẻ bài viết" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "Tên ngày" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "Tên thân thiện với người dùng cho thẻ bài viết" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "Thẻ bài viết" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "Thẻ bài viết" diff --git a/blog/locale/zh_Hans/LC_MESSAGES/django.mo b/blog/locale/zh_Hans/LC_MESSAGES/django.mo index d5aa24e1ac887eec330de2e267d98d788a64325a..87147ba270ba5d5dcfafb66fbe79e44e702b4ca0 100644 GIT binary patch delta 1284 zcmZXR&2Jk;7{)hgpp?(15`qJ&Mgl~TELVa{Dp1 zgzTjGu&JY1q|GNuaVbrNh~20nauO%)AJ79w4yc#zjMt|ed*zwk1S%M5_BZqHJMZ(n zGmj5l?=L<)(s$j!=*N5w^A_eSn28>IFv{RJm=(;^*!LbVj6U!TH~^jlUj)AeKLjh_ zDewWP^A6+l4EQp52s{ct3l4x!8Aj1~7mLFPoB(y=C-D#CQ}A`{FMwY{{5$Xi@GqQt z5AmZ14dZF>3-Apv1-=B1gYSbg;BoLzQ0Mid`19badweru(JdCU+S#O`CciNwbXQFpmg?J>mMM@LfizlO`#aqn9o25}tXo zPLiA!#BxmAPvaOB!nIOJgV+D*BddIa$Ii^x^Ky z5^dZa6vhanIm63)Vz*q(HOGz*gk&q46_Bw?yjd_Y?53& zmSc9|7#_>I%-q3?Z=bw-zo);q7;OC<)>q`jyqX?YD|NYa^-*b9wx;E3t+Tcz8}q?N zCD@CSkrr%^1+9tj%C@Xk)y%q@ zJf*Y4dvihSR%dx)->>c|yf>?^HB}YeY^aGw+*3IItNebYbM1yI*AVHf?!e{L9|yiV zt7eehenF5Way^PdpW&k)CV+hth&-)ro)E4uIK+GTBKw|!&kMBmQeL7v#; delta 352 zcmXZXJrBW96vpw>H>F-u#D;}LC$oseU}+6Lg5Ao*Vzk(*iPdH|ios@(h|T0{SPcHR z?nzF5_dfTg_cSSga_e`+PJ}Aab$Uxz=`XD+G(;kd(8d@8+~WwZI(JNwEPD@gSVa#T z=wN_8c2V6M{`0kjELsE;obs_b4%j~}kqnl2wT(6GVINh#zyhwc8|_Y?AF#stQRio! z->^geKtsl?bh)S|Q`4)7)5no{q)2l=eGt-OKFRB~`qS93mZ!Vrn{m^f#V_~r1DZD) AqyPW_ diff --git a/blog/locale/zh_Hans/LC_MESSAGES/django.po b/blog/locale/zh_Hans/LC_MESSAGES/django.po index cfe975a8..9b68fe4b 100644 --- a/blog/locale/zh_Hans/LC_MESSAGES/django.po +++ b/blog/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 13:56+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -17,51 +17,70 @@ msgstr "" msgid "blog" msgstr "博客" -#: blog/models.py:36 +#: blog/models.py:12 +msgid "" +"Represents a blog post model. The Post class defines the structure and " +"behavior of a blog post. It includes attributes for author, title, content, " +"optional file attachment, slug, and associated tags. The class enforces " +"constraints such as requiring either content or a file attachment but not " +"both simultaneously. It also supports automatic slug generation based on the" +" title." +msgstr "" +"代表博文模型。帖子类定义了博文的结构和行为。它包括作者、标题、内容、可选文件附件、标签和相关标记的属性。该类可强制执行一些限制条件,如要求提供内容或文件附件,但不能同时提供这两种内容。它还支持根据标题自动生成标签。" + +#: blog/models.py:23 msgid "post title" msgstr "帖子标题" -#: blog/models.py:36 +#: blog/models.py:23 msgid "title" msgstr "标题" -#: blog/models.py:84 +#: blog/models.py:68 +msgid "is static page" +msgstr "是静态页面" + +#: blog/models.py:69 +msgid "is this a post for a page with static URL (e.g. `/help/delivery`)?" +msgstr "这是静态 URL 页面(如 `/help/delivery`)的帖子吗?" + +#: blog/models.py:76 msgid "post" msgstr "职位" -#: blog/models.py:85 +#: blog/models.py:77 msgid "posts" msgstr "职位" -#: blog/models.py:89 +#: blog/models.py:81 msgid "markdown files are not supported yet - use markdown content instead" msgstr "不支持 Markdown 文件,请使用 Markdown 内容!" -#: blog/models.py:91 +#: blog/models.py:83 msgid "" "a markdown file or markdown content must be provided - mutually exclusive" msgstr "必须提供标记符文件或标记符内容 - 相互排斥" -#: blog/models.py:123 +#: blog/models.py:115 msgid "internal tag identifier for the post tag" msgstr "职位标签的内部标签标识符" -#: blog/models.py:124 +#: blog/models.py:116 msgid "tag name" msgstr "标签名称" -#: blog/models.py:128 +#: blog/models.py:120 msgid "user-friendly name for the post tag" msgstr "方便用户使用的帖子标签名称" -#: blog/models.py:129 +#: blog/models.py:121 msgid "tag display name" msgstr "标签显示名称" -#: blog/models.py:137 +#: blog/models.py:129 msgid "post tag" msgstr "职位标签" -#: blog/models.py:138 +#: blog/models.py:130 msgid "post tags" msgstr "帖子标签" diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo index aa3601790d2458969caea4863d917e24099fee32..892809794a5699dd09eb41c6b4b074b28a154746 100644 GIT binary patch delta 13127 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 i9RGM!m6IHB?aZJWn-Kj(KWLHP&3EYN{cvprup| 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -107,7 +107,7 @@ msgstr "الصورة" msgid "images" msgstr "الصور" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "المخزون" @@ -115,11 +115,11 @@ msgstr "المخزون" msgid "stocks" msgstr "الأسهم" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "طلب المنتج" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "اطلب المنتجات" @@ -127,7 +127,7 @@ msgstr "اطلب المنتجات" msgid "children" msgstr "الأطفال" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "التكوين" @@ -179,7 +179,7 @@ msgstr "مومنتال" msgid "successful" msgstr "ناجح" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "ذاكرة التخزين المؤقت للإدخال/الإخراج" @@ -203,7 +203,7 @@ msgstr "الحصول على معلمات التطبيق القابلة للكش msgid "send a message to the support team" msgstr "إرسال رسالة إلى فريق الدعم" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "طلب عنوان URL مرتبط بـ CORSed. مسموح بـ https فقط." @@ -427,7 +427,7 @@ msgstr "" "ينهي أمر الشراء. إذا تم استخدام \"فرض_الرصيد\"، يتم إكمال عملية الشراء " "باستخدام رصيد المستخدم؛ إذا تم استخدام \"فرض_الدفع\"، يتم بدء المعاملة." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "شراء طلب شراء بدون إنشاء حساب" @@ -711,272 +711,272 @@ msgstr "حذف علاقة الطلب-المنتج" msgid "add or remove feedback on an order–product relation" msgstr "إضافة أو إزالة الملاحظات على العلاقة بين الطلب والمنتج" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "بحث" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "الاسم" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "الفئات" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "الفئات الرخويات" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "الوسوم" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "الحد الأدنى للسعر" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "ماكس برايس" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "نشط" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "العلامة التجارية" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "السمات" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "الكمية" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "سبيكة" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "هو رقمي" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "تضمين الفئات الفرعية" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "تضمين المنتجات المطلوبة شخصيًا" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "وحدة التخزين" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "يجب أن يكون هناك category_uid لاستخدام علامة تضمين_الفئات_الفرعية" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "البحث (المعرف أو اسم المنتج أو رقم الجزء)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "تم الشراء بعد (شامل)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "تم الشراء من قبل (شامل)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "البريد الإلكتروني للمستخدم" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "معرّف المستخدم UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "الحالة" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "معرّف قابل للقراءة من قبل الإنسان" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "الوالدين" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "الفئة الكاملة (تحتوي على منتج واحد على الأقل أو لا)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "المستوى" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID المنتج" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" "مفتاح للبحث عنه في ذاكرة التخزين المؤقت أو تعيينه في ذاكرة التخزين المؤقت" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "البيانات المراد تخزينها في ذاكرة التخزين المؤقت" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "المهلة بالثواني لتعيين البيانات في ذاكرة التخزين المؤقت" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "البيانات المخزنة مؤقتاً" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "إضافة منتج إلى الطلب" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "الطلب {order_uuid} غير موجود!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "إزالة جميع المنتجات من الطلب" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "شراء طلبية" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "تنفيذ إجراء على قائمة من المنتجات بالترتيب" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "إزالة/إضافة" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "تنفيذ إجراء على قائمة المنتجات في قائمة الأمنيات" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "يُرجى تقديم قيمة \"wishlist_uid\"." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "قائمة الرغبات {wishlist_uuid} غير موجودة!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "إضافة منتج إلى الطلب" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "إزالة منتج من الطلب" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "شراء طلبية" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "الرجاء إرسال السمات كسلسلة منسقة مثل attr1=قيمة1، attr2=قيمة2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "إضافة أو حذف تعليق على طلبالمنتج" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "يجب أن يكون الإجراء إما \"إضافة\" أو \"إزالة\"!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "طلب المنتج {order_product_uuid} غير موجود!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "سلسلة العنوان الأصلي المقدمة من المستخدم" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "يجب أن يكون الحد بين 1 و10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - يعمل مثل السحر" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "السمات" @@ -989,11 +989,11 @@ msgid "groups of attributes" msgstr "مجموعات السمات" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "الفئات" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "العلامات التجارية" @@ -1002,7 +1002,7 @@ msgid "category image url" msgstr "الفئات" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "النسبة المئوية للترميز" @@ -1024,7 +1024,7 @@ msgstr "العلامات الخاصة بهذه الفئة" msgid "products in this category" msgstr "المنتجات في هذه الفئة" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "البائعون" @@ -1049,7 +1049,7 @@ msgid "represents feedback from a user." msgstr "يمثل ملاحظات من المستخدم." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "الإشعارات" @@ -1057,7 +1057,7 @@ msgstr "الإشعارات" msgid "download url for this order product if applicable" msgstr "تحميل الرابط الخاص بمنتج الطلب هذا إن أمكن" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "الملاحظات" @@ -1065,7 +1065,7 @@ msgstr "الملاحظات" msgid "a list of order products in this order" msgstr "قائمة بطلب المنتجات بهذا الترتيب" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "عنوان إرسال الفواتير" @@ -1093,7 +1093,7 @@ msgstr "هل جميع المنتجات في الطلب رقمي" msgid "transactions for this order" msgstr "المعاملات الخاصة بهذا الطلب" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "الطلبات" @@ -1105,19 +1105,19 @@ msgstr "رابط الصورة" msgid "product's images" msgstr "صور المنتج" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "الفئة" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "الملاحظات" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "العلامة التجارية" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "مجموعات السمات" @@ -1145,7 +1145,7 @@ msgstr "عدد الملاحظات" msgid "only available for personal orders" msgstr "المنتجات متاحة للطلبات الشخصية فقط" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "المنتجات" @@ -1157,15 +1157,15 @@ msgstr "الرموز الترويجية" msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "العروض الترويجية" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "البائع" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1173,11 +1173,11 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "قوائم التمنيات" @@ -1185,7 +1185,7 @@ msgstr "قوائم التمنيات" msgid "tagged products" msgstr "المنتجات الموسومة" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "علامات المنتج" @@ -1272,7 +1272,7 @@ msgstr "نتائج البحث عن المنتجات" msgid "posts search results" msgstr "نتائج البحث عن المنتجات" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1284,23 +1284,23 @@ msgstr "" "يشكل بنية هرمية. يمكن أن يكون هذا مفيدًا لتصنيف السمات وإدارتها بشكل أكثر " "فعالية في النظام المعقد." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "والد هذه المجموعة" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "مجموعة السمات الرئيسية" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "اسم مجموعة السمات" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "مجموعة السمات" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1317,41 +1317,49 @@ msgstr "" "أيضًا ببيانات وصفية وقيود إضافية، مما يجعله مناسبًا للاستخدام في الأنظمة " "التي تتفاعل مع البائعين الخارجيين." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "تخزين بيانات الاعتماد ونقاط النهاية المطلوبة لاتصالات واجهة برمجة التطبيقات " "الخاصة بالمورّد" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "معلومات المصادقة" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "تحديد الترميز للمنتجات المسترجعة من هذا البائع" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "نسبة هامش الربح للبائع" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "اسم هذا البائع" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "اسم البائع" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "ملف الاستجابة" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "استجابة البائع الأخيرة للمعالجة" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "مسار ملف تكامل البائع" + +#: core/models.py:154 +msgid "integration path" +msgstr "مسار التكامل" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1364,27 +1372,27 @@ msgstr "" "عرض سهل الاستخدام. وهي تدعم العمليات التي يتم تصديرها من خلال mixins وتوفر " "تخصيص البيانات الوصفية لأغراض إدارية." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "معرّف العلامة الداخلي لعلامة المنتج" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "اسم العلامة" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "اسم سهل الاستخدام لعلامة المنتج" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "اسم عرض العلامة" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "علامة المنتج" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1393,15 +1401,15 @@ msgstr "" "يمثل علامة فئة تستخدم للمنتجات. تمثل هذه الفئة علامة فئة يمكن استخدامها لربط" " المنتجات وتصنيفها. وهي تتضمن سمات لمعرف علامة داخلي واسم عرض سهل الاستخدام." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "علامة الفئة" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "علامات الفئة" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1421,51 +1429,51 @@ msgstr "" " الفئات ووصفها وتسلسلها الهرمي، بالإضافة إلى تعيين سمات مثل الصور أو " "العلامات أو الأولوية." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "تحميل صورة تمثل هذه الفئة" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "صورة الفئة" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "تحديد نسبة ترميز للمنتجات في هذه الفئة" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "أصل هذه الفئة لتكوين بنية هرمية" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "الفئة الرئيسية" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "اسم الفئة" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "تقديم اسم لهذه الفئة" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "إضافة وصف تفصيلي لهذه الفئة" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "وصف الفئة" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "العلامات التي تساعد في وصف هذه الفئة أو تجميعها" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "الأولوية" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1478,47 +1486,47 @@ msgstr "" "المرتبطة بها وسبيكة فريدة وترتيب الأولوية. يسمح بتنظيم وتمثيل البيانات " "المتعلقة بالعلامة التجارية داخل التطبيق." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "اسم هذه العلامة التجارية" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "اسم العلامة التجارية" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "تحميل شعار يمثل هذه العلامة التجارية" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "صورة العلامة التجارية الصغيرة" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "رفع شعار كبير يمثل هذه العلامة التجارية" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "صورة كبيرة للعلامة التجارية" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "إضافة وصف تفصيلي للعلامة التجارية" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "وصف العلامة التجارية" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "الفئات الاختيارية التي ترتبط بها هذه العلامة التجارية" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "الفئات" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1533,68 +1541,68 @@ msgstr "" "والأصول الرقمية. وهي جزء من نظام إدارة المخزون للسماح بتتبع وتقييم المنتجات " "المتاحة من مختلف البائعين." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "البائع المرتبط" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "سعر البيع" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "المنتج المرتبط" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "ملف رقمي" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "إدخالات المخزون" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1614,51 +1622,51 @@ msgstr "" "للخصائص التي يتم الوصول إليها بشكل متكرر لتحسين الأداء. يتم استخدامه لتعريف " "ومعالجة بيانات المنتج والمعلومات المرتبطة به داخل التطبيق." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "الفئة التي ينتمي إليها هذا المنتج" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "يشير إلى ما إذا كان هذا المنتج يتم تسليمه رقميًا أم لا" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "هل المنتج رقمي" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "توفير اسم تعريفي واضح للمنتج" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "اسم المنتج" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "وصف المنتج" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "رقم الجزء لهذا المنتج" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "رقم الجزء" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "وحدة حفظ المخزون لهذا المنتج" @@ -1725,11 +1733,11 @@ msgstr "اسم هذه السمة" msgid "attribute's name" msgstr "اسم السمة" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "قابل للتصفية" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "يحدد ما إذا كان يمكن استخدام هذه السمة للتصفية أم لا" @@ -1783,27 +1791,27 @@ msgstr "النص البديل للصورة" msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "صورة المنتج" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "أولوية العرض" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "صور المنتج" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1818,39 +1826,39 @@ msgstr "" "بالمنتجات القابلة للتطبيق. تتكامل مع كتالوج المنتجات لتحديد العناصر المتأثرة" " في الحملة." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "نسبة الخصم" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "اسم الترقية" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "وصف الترقية" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "المنتجات المشمولة" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "الترقية" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1861,23 +1869,23 @@ msgstr "" " لإدارة مجموعة من المنتجات، وتدعم عمليات مثل إضافة المنتجات وإزالتها، " "بالإضافة إلى دعم عمليات إضافة وإزالة منتجات متعددة في وقت واحد." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "قائمة الرغبات" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1891,19 +1899,19 @@ msgstr "" "الوصفية. يحتوي على أساليب وخصائص للتعامل مع نوع الملف ومسار التخزين للملفات " "الوثائقية. وهو يوسع الوظائف من مزيج معين ويوفر ميزات مخصصة إضافية." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "فيلم وثائقي" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "لم يتم حلها" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1922,59 +1930,59 @@ msgstr "" "يتيح تخزين استجابات واجهة برمجة التطبيقات الخام لمزيد من المعالجة أو الفحص. " "تسمح الفئة أيضًا بربط عنوان مع مستخدم، مما يسهل التعامل مع البيانات الشخصية." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "سطر العنوان للعميل" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "سطر العنوان" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "الشارع" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "المنطقة" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "المدينة" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "المنطقة" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "الرمز البريدي" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "البلد" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "نقطة تحديد الموقع الجغرافي(خط الطول، خط العرض)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "استجابة JSON كاملة من أداة التشفير الجغرافي لهذا العنوان" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "استجابة JSON مخزّنة من خدمة الترميز الجغرافي" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "العنوان" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "العناوين" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1989,72 +1997,72 @@ msgstr "" "والمستخدم المرتبط به (إن وجد)، وحالة استخدامه. ويتضمن وظيفة للتحقق من صحة " "الرمز الترويجي وتطبيقه على الطلب مع ضمان استيفاء القيود." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "المستخدم المعين" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "الرمز الترويجي" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "الرموز الترويجية" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2062,16 +2070,16 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2086,134 +2094,134 @@ msgstr "" "مرتبطة، ويمكن تطبيق العروض الترويجية، وتعيين العناوين، وتحديث تفاصيل الشحن " "أو الفوترة. وبالمثل، تدعم الوظيفة إدارة المنتجات في دورة حياة الطلب." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "عنوان إرسال الفواتير المستخدم لهذا الطلب" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "الرمز الترويجي الاختياري المطبق على هذا الطلب" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "الرمز الترويجي المطبق" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "عنوان الشحن المستخدم لهذا الطلب" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "عنوان الشحن" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "الحالة الحالية للطلب في دورة حياته" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "حالة الطلب" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " "استخدام عرض الجدول" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "تمثيل JSON لسمات الطلب لهذا الطلب" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "المستخدم الذي قدم الطلب" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "المستخدم" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "الطابع الزمني عند الانتهاء من الطلب" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "وقت الشراء" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "معرّف يمكن قراءته بواسطة البشر للطلب" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "معرّف يمكن قراءته من قبل البشر" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "الطلب" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "يمكنك فقط شراء المنتجات المادية مع تحديد عنوان الشحن فقط!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "العنوان غير موجود" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "لا يمكنك شراء طلب بدون مستخدم!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "المستخدم بدون رصيد لا يمكنه الشراء بالرصيد!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2221,14 +2229,14 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "طريقة الدفع غير صالحة: {payment_method} من {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2247,108 +2255,108 @@ msgstr "" " تدعم منطق العمل، مثل حساب السعر الإجمالي أو إنشاء عنوان URL للتنزيل " "للمنتجات الرقمية. يتكامل النموذج مع نموذجي الطلب والمنتج ويخزن مرجعًا لهما." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "التعليقات الداخلية" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "إشعارات المستخدم" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "ترتيب الوالدين" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "كمية المنتج" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "حالة خط الإنتاج" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "يجب أن يكون لـ Orderproduct طلب مرتبط به!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "تم تحديد إجراء خاطئ للتغذية الراجعة: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "لا يمكنك التعليق على طلب لم يتم استلامه" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "الاسم" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "رابط التكامل" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "بيانات اعتماد المصادقة" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "يمكن أن يكون لديك موفر CRM افتراضي واحد فقط" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "إدارة علاقات العملاء" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "إدارة علاقات العملاء" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "رابط إدارة علاقات العملاء الخاصة بالطلب" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "روابط إدارة علاقات العملاء الخاصة بالطلبات" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2363,15 +2371,15 @@ msgstr "" "إذا كان الأصل مرئيًا للعامة. وتتضمن طريقة لإنشاء عنوان URL لتنزيل الأصل " "عندما يكون الطلب المرتبط في حالة مكتملة." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "تنزيل" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "التنزيلات" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2384,60 +2392,52 @@ msgstr "" "المستخدم، ومرجع إلى المنتج ذي الصلة في الطلب، وتقييم معين من قبل المستخدم. " "يستخدم الفصل حقول قاعدة البيانات لنمذجة وإدارة بيانات الملاحظات بشكل فعال." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "التعليقات المقدمة من المستخدمين حول تجربتهم مع المنتج" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "تعليقات على الملاحظات" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "الإشارة إلى المنتج المحدد في الطلب الذي تدور حوله هذه الملاحظات" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "منتجات الطلبات ذات الصلة" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "التصنيف المعين من قبل المستخدم للمنتج" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "تصنيف المنتج" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "يجب عليك تقديم تعليق، وتقييم، وطلب المنتج uuid لإضافة ملاحظاتك." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "خطأ أثناء إنشاء الرمز الترويجي: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "الصفحة الرئيسية" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "اتصل بنا" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "نبذة عنا" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "معلومات الدفع" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "التوصيل" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2607,11 +2607,11 @@ msgstr "" "جميع الحقوق\n" " محفوظة" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "كل من البيانات والمهلة مطلوبة" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "قيمة المهلة غير صالحة، يجب أن تكون بين 0 و216000 ثانية" @@ -2643,7 +2643,7 @@ msgstr "ليس لديك إذن لتنفيذ هذا الإجراء." msgid "NOMINATIM_URL must be configured." msgstr "يجب تكوين معلمة NOMINATIM_URL!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "يجب ألا تتجاوز أبعاد الصورة w{max_width} x h{max_height} بكسل!" @@ -2702,15 +2702,23 @@ msgstr "يتعامل مع استعلامات البحث العامة." msgid "Handles the logic of buying as a business without registration." msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "الطلب_برو_منتج_uuid مطلوب" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "لا يحتوي منتج الطلب على منتج" + +#: core/views.py:359 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." @@ -2718,11 +2726,11 @@ msgstr "" "يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" "تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2730,7 +2738,7 @@ msgstr "" "يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" "تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2740,7 +2748,11 @@ msgstr "" " توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " "Django للتعامل مع إعادة توجيه HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "إرجاع الإصدار الحالي من eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2753,7 +2765,7 @@ msgstr "" "Evibes. وتتضمن دعمًا لفئات المتسلسلات الديناميكية استنادًا إلى الإجراء " "الحالي، والأذونات القابلة للتخصيص، وتنسيقات العرض." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2766,7 +2778,7 @@ msgstr "" "تعد هذه الفئة جزءًا من طبقة واجهة برمجة التطبيقات الخاصة بالتطبيق وتوفر " "طريقة موحدة لمعالجة الطلبات والاستجابات لبيانات AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2781,7 +2793,7 @@ msgstr "" "البيانات التي يتم إرجاعها، مثل التصفية حسب حقول معينة أو استرجاع معلومات " "مفصلة مقابل معلومات مبسطة حسب الطلب." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2795,7 +2807,7 @@ msgstr "" "المناسبة للإجراءات المختلفة. يتم توفير إمكانيات التصفية من خلال " "DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2808,7 +2820,7 @@ msgstr "" " الفئة وتصفيتها وتسلسلها. تفرض مجموعة طرق العرض أيضًا الأذونات لضمان وصول " "المستخدمين المصرح لهم فقط إلى بيانات محددة." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2820,7 +2832,7 @@ msgstr "" "Django's ViewSet لتبسيط تنفيذ نقاط نهاية واجهة برمجة التطبيقات لكائنات " "العلامة التجارية." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2836,7 +2848,7 @@ msgstr "" "عمل Django REST لعمليات RESTful API. يتضمن أساليب لاسترجاع تفاصيل المنتج، " "وتطبيق الأذونات، والوصول إلى الملاحظات ذات الصلة بمنتج ما." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2850,7 +2862,7 @@ msgstr "" "الفئة هو توفير وصول مبسط إلى الموارد المتعلقة بالمورد من خلال إطار عمل " "Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2866,7 +2878,7 @@ msgstr "" " \"مجموعة عرض الملاحظات\" الأساسية وتستفيد من نظام تصفية Django للاستعلام عن" " البيانات." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2883,7 +2895,7 @@ msgstr "" "عليه. يستخدم ViewSet العديد من المتسلسلات بناءً على الإجراء المحدد الذي يتم " "تنفيذه ويفرض الأذونات وفقًا لذلك أثناء التفاعل مع بيانات الطلبات." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2896,11 +2908,11 @@ msgstr "" "من الأذونات، وتبديل المتسلسل بناءً على الإجراء المطلوب. بالإضافة إلى ذلك، " "توفر إجراءً مفصلاً للتعامل مع الملاحظات على مثيلات OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "يدير العمليات المتعلقة بصور المنتج في التطبيق." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2908,15 +2920,15 @@ msgstr "" "يدير استرداد مثيلات PromoCode ومعالجتها من خلال إجراءات واجهة برمجة " "التطبيقات المختلفة." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "يمثل مجموعة عرض لإدارة الترقيات." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "يتعامل مع العمليات المتعلقة ببيانات المخزون في النظام." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2933,7 +2945,7 @@ msgstr "" "الأذونات للتأكد من أن المستخدمين يمكنهم فقط إدارة قوائم الرغبات الخاصة بهم " "ما لم يتم منح أذونات صريحة." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2946,12 +2958,12 @@ msgstr "" "العناوين. وتتضمن سلوكيات متخصصة لطرق HTTP المختلفة، وتجاوزات المتسلسل، " "ومعالجة الأذونات بناءً على سياق الطلب." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "خطأ في الترميز الجغرافي: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo index 3502a453e20f5b14ff01dbd9066d58177efb8d97..dc3cd210d53925f8bdeaeb4ce0dca9a446fb5133 100644 GIT binary patch delta 13076 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 JiGIm}{{i%>uV(-N delta 12824 zcmZwO2YiiZ|Htv`h=|xTVkaVz5L-yBBt{6e_iT-zkF82k4pp^-5~HZrtWqmTwKZzC zXlWHKN{v$WptWhM|IhbaSN<=r|LcFh`t!clx$o<~#(f{h^Q@WYe>>IRd$B;)G{ez6 zi!mi|WC3Fe`WbV)tV)duu4+snEQ&9CjH!g#$){E`CIA;<4qSo3_%Rm61L%)GBd0T0 zF)QA{3HV>+b6zvBx-t1E7=?v#DlWj~m<_AduosBK1Uk?N)qyE7#)M)jmcuPr41dHO z+{}H9Bfmb@p7$zJWS%-JQyIhcO$v!ZR4l~^+=9LEESAE!+Qy9M!kw`No~dI@Ey~N* zGp03m$4B@HZpGF0jmb&7j`7CupXr@oZ)hcI1ZpK3lOOA1FxNLNNd#ek48#ejA)SUr za6W1%H=u@iEApQ?${%|@#^h?i#mFCTXiO*aVU3Jwh~paD^X*NtevP5DJB8}VL-Z~s z@r*<^T-b!U$K{v{x1vU754Prnr%*#*Hrbd-JM}0yo zV_v7cIKxy9=e04W8SZM!Xkym(jDI2@=+VKLB^0daWXyJq>tf6?PH?9yi<10j-Iz~2 z+ufMTlppJflOjq)ydKr_<`Ns4%CXM`ozP5v1`WZ8fa=!s|lJb%NVf|qA zAjY50n{9*boc@EFo0uVX)iyzmOmmFHwy2>S=gKF#{8Z#xW)^CZ{)w8>YQt>%WYpBQ zL``jHJV3iXUJ`!vtlS8OlZpx>jfui87=e?qDt?Sr@B(TIa=&g@eGrC`uaEj%Z;ZxS zu6~y*zl^M3lXH~aB}rJ4yth|o0(FAr7=uT!5dMQ&gat<1kt&aQ$-j;PI0b`nHfqhR zMxA&o>W)ufC;SOpV%0b7u9%38wEy>!C_sh(815c}QH!t<=E2UW`u;c$$6`1>LhXtY zV;K!BgN3mQs(lh_D!ZUMG7xpST8xd=1^Pt*m6x%@cPBAku7 z(*>v#tV9j@A=H}q9(AYZF(>|t>e!#IzQlNY-f-0Qs-RaNOdz4TPDTxRPt*_&MqO|s z>dsS97hLbkcVYOy~^rY7eEd%jTAc`8p}{B_~F6zGF(P#^4w zzL9VaL$!MgHTR1!AMQp?#kW`#uQ>lkT{wv0)r~};&Krl(n21_yL%bxk7~XRQTQQdW z&lrb66KzLYJA0!pJksT-pgOP!)qxGpL#Pg1LQU0OR7VO-vQrd}n&Qe{5)DYy#%eeo zH8fjL+i*AP0{2lD4tUEBbuembLQ!*F8AGv-tM7qYg#A!!VlkG%m6(8sP#yGUn{4ke z2=%~;L@l;fuDl~^ZU?yhaMTGWV-(KDT9|=r@Gh!-+S_){-^Uu{x1+Y}P1FeA#X8#m zkyC6>`=aJ(Ax7f+s5?4>>ex-xh4Q^)w`)_>kiLRi8?RvqPD3r$^{6#;5L@6G>5Q!pD2MV)9AYD%VIB2`6&VP*0u zs3}atWL%H+@jeD}eN%0Qoy)qYJ8FhCu?JSf1y~*TqaQv(b>JCl4TR0)6^m6-`4(6T zyP<}DEb6?Qu^jGq{*GP^ae-NOsB2&d`Hol;M`IOC!_s)z)nCU7yyC~2FzrwtD9(AEx7=lkR8jH=f?VDgO z@*S}R_CekGL{x{CVm@4n`dm8d#(qJa|1oM81bFA!)ti7iVF%2Ky-_C~f|}czsKvJq zwdj6!{)$>$x6!xw-nDBc4mJ1vQRU095&nQ0p`!D7+M>5E30*K1wT<3G4b5iM9PU6} za1R#5!>ExthZ?!xT=`?v4dh&4?>rb)AB8%9EULbdt8asx-)nl4(4%vptC)gC$S*`K zvQ4NDp2Hk?1NAbwhdOcgG&{6~P-~`lYf=f|z_PO&ShLiU!vE}7ZBiIaUU|&>+mY_ypCw9Xxu^pCt&#r~x z=uK7w647Xu+7YOTg~+x<&2=9vio;P;G83y}hVv$BB#JMyCZQfQ!?89l!6^K})j!8- zOAN#A zsOP~%tc+8!0cN=JXI_`^tg>^J9ShQ+AnJnUP}?vTwWtzN50G{kgndvWG8QZ1dOV6} zaWbx4ZKon)jUBO;m_YdqRD16+5}Ny`7=aOM?dorV8sbr?MYRpX@dj$HbFZ`Sh*;EI zcf@#{fHAlSb>0V97DGScYaS+{7Ug90*Zxl>p?$mnwa7leF#HUQ<3-f|e}*M7V7(p6 za112h0b}uH)QJ~kFs{O6`~sse+sF0>s$hBY9Wg@te-a4|=|`9qKSd4AZY+SeP#t-W zx|3oX>`299ee(T~J27i82X4S@xD(Zp-Ix>4ptkoFRJ$h_%Jq%kMt4UTK)wTx#~!G; zJ&&Q7;}g4YqcJ=A;iyG87R%st)Y{pIfw&JV;!)I8KEXt+vB@sNQRt1PU>AwGOSMLX0SPryDN-dd<3G~4;gO};2bE0@FBj!2}^uyx6SwyoPhi^`~&BlzbCTrmON$a>z?67MR~)s z#x%wgKic1j3ZJvT{R}(LU-`3m`8s`phYk%^U*cB^Ya+5_$yNFxNJNc!z`C^N;?%IwO|C3iR`DOR{mW4eZaxJcJ zo<6eME&j0`s*&hN`4rStOvhTd7&V6{ou^S#a}ImsRn*UPNl)zSd(l(dek10kek1b1S=nO?u_#u-EvTuu zj6rxE1Mwf!ZVK?XtZmrbou^X68gXx)CK3biVsk8whcAp`%xb}hU(xo z)D%6(NUX?~sE8dg8sEln+=_Z9oJDoy7M8>NF7GWKVDB&tb5jwET69UMJL`b@;2_kK zawLY~RF~g?`rIB=$BttOyp9@CzwGt~Vo)PgAJw6zHt#jvN$5`dp)N4WR+#Ci5t)xV z@oLl%?m?a4BNc?VZM!Z{W7zF&rV0rwp{kkN}%#puoNbtI+EhbC!?lniOcWCT;xx={4eO$wtGZEJ&Vh2 zr(h7OBVN>6*n=9%Z%`w288reoT>0NvlYG8BcIca6GxBXvQ@ae+k&W0IPhtp$=4JnD zZX4vaL)#s-nBGC%*#cAtK6dVMeudhGXHgx^p3md^rgmQH!!2mc|s+4NYIroP)$?kFZG$A#u4siZ*c;<0iKM2*ySY=VEIo(GMB zY{v(qI=l>%aXU7}=crxbZBoSD0cx?OU|oC@wY_%XJ9rJXO9lqpj*LK^;3L%BZbx5- z(6|3lUpoDYx{*SSY&+*nWD33J00})P9-xLgqL|HhKrPOxsJTAs{0p_%qKn%{a39oS z9DtgF@u;C)?(%D~9r?qqycqwWr1~(-ul*lQLU&dlH3E%MC+zO>!%>gaX{g1u12v@k zP@nq|dHqR#&?%(G+mUG0c58(?@f6gF(om~?9jg5?ERGjZL;K9-^M%{`Xbhx09(A5%)D(3= zoiD{pLUS}4H4P~Mv^GA7n-|=El<-MF!oa?b6<=>#zK>qUfj_Y72 z^3Aa&u0nO_p3QqrYz2?~X$1Aa$-oA91vQu9(e~{ZhZ>o-s2`Q4ptjdO)b@IYT5Odn z+I&AuApf4rpGSQ@ZzYfK?-dPvvj1Nt(T0k-sG+%n>S>wE_E9+;wR%5u`7BlJTdX;% z{W9!>7qB}fRJBvI99xq&)vRrtD^cz4V-2ovT35G2ItBI8S&v%nColvry8OR5iF}?K zwtg<^WwQePaToelJL>Ot-=TKTBh;Ng$8K0P#AD^Sy}`Y6=vw=vekw=o^};{+U4%U<{)Y6K%=?bHrKO?7%K`(IDCixkM5aduV5 zqUN$6R>k*Gi|!<9t{=F3WNo{9UcwfXk3)6jYt-5ZsAE5$h^@%Kh8m#*s6~Ie4*OqE zybBbR#@|sr%Td>E#~9QIwMRYadSU{;hMJ=7sI_wdb)LfY>|zbWzU1qoZs0@Ic~7BU zX3t%|vbVk+%C4vjjlu++h}y?rqCRjIHA30r?Y@pd?Set5IbMgF!p*2B+vlif{z23f zUP0Z!J)7i)INTIAy_KW?uK~O38$gHlrBcy*;drrxqy0k zWoclisvv4RH$hFo3~Y?&Y`xcnG_-To9(AXws4otCQFHni>H^7)JSG)KViNi_wij%M ziR6c2Mcjt%@fXwx#U$B9I1DS1UxjM-J(kz|-!!oggbJut-xfW{^T&6T&O#HSjLrIf zj@jtaY;oT)0~?WgL~vtfr!6+$IKQH780j0t0%9_GjYdu{Ck`Srns|%g{o(6<4qQQ; zCf*@#(O5?d(g*Q`FULATJ%spn<~#iOa}3eJHDhOl=K18nTHlzO_ym(`#G+T*M)gP>>@s+z5;c(TwQDOwa8y{ zpDUGx@vlh1T?z`*=qb_KHCCHY>NcUKyTiNMRdSco+xpfpbI^%5@~+HOe~@JhpvDn#C-0`7E^A zN4f&#dr{8?9iI??lYf<%Pg+mHLqtCEwYB~}C4MBnp+LuI;&;+{TwY~uU3#1{98p|M zPrC7xH^7ZpP!$}5NJkL!iJ|0c&^GgUNSTgrF_LocY7)CB2q%+|2qc0jtBlz(42$6o zBJ=ow1P{vpJ>GLE{ZFrkQ9hUaUDT6rKOR9n+^W3rnE=w0edA9BFE-!ryClt8A|Fwj zvV-me>&c%d-G~beCmlizArf4@zJk4YRHI!X>h8HhJ@K}_&|t0m+)3U)CV|E}J|-fF zfv!?z#YwNhP~tt(kBPCw*W`~8JSt2Nq8YK7d$!d`{G-ycZ54bm*7O zt+X3UI)g|hjuQVR{_hczh3o%G<7lFgt1Zt7Dw5ZsujD%PWhB2VyXaJTC;j0Ly>6Sk zxl3o7~u{trFf=R^Br2DDT9kK32ohV!8%Cb>*n{;KD z&q7@wkwE?`(fx(bzeaiyW%^21p7d|TFGMBI;T!)PRJ=s|OWdKN8crd$lg>PzkVqol zB4!fLT-^v!?9YB03YJ2pzqNP}=$1wqCP{#93bze*?yI&r}p4LF82na4WPuaS9$NOR@WoF46e9bv=;3fBq`xHo)b%U6 zifPXN&LcEb{d)9wXZnZq86xwTNBSq?5D`T@qvCC1Rb~U{5bCm$u8TQ|qC^?a>HVIB zjyQ|?$eBq?SN{_QZxT1j7tg#c@;iw7gpP2+kNTFl5VPYAtV;V2QO5^(l(<0pyzVca zOa`%qf^Nh`VlVL(F_2hCWF9fJ3+7~=7dkMLvTcNpyp;c!^tYt{AxaaMTpdZ@zbVS4 zl*ReZ!T1(d3CDLt429jXth+!73?hGu(D5?yI#HAI+OCbtGmkDLW)o9gK~^sGm~?L1 zjw8K?bQo?SbbRe4QQKuAXf(j3RawTRSCg(oU0oG&lq8+}Lc0=_{i>ksFE!w}PW*=` zK-o^B9G{6I|C#&TJkmP2e|t2hVzH}K$#z#BgUgAtu5P+3&xS#qv@oHgDfRv~X$F%n zM|vdjk^5YB+RY-}3>#rOaah;yNu#&P^u?aopLn0p{~_UB{GIZZsAI6jbanQoJeqVb ze3Mv0taNpG@O_sSk;H$ffAMIp`!C3abm-ss_Po#_iS%Wc_oHqu>A#2++uYnEU5E5( zm#K4q10JjN2`NbA^73?*GunaGqkdZo9h`fAp|ltHhKN*OW6G@3v9tl8-ScEk esf?XLp47mMJ|UjJgEJ<^c~%Exyp-ta67WB~TvImy diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.po b/core/locale/cs_CZ/LC_MESSAGES/django.po index 21e8b2bd..9f546a7f 100644 --- a/core/locale/cs_CZ/LC_MESSAGES/django.po +++ b/core/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -109,7 +109,7 @@ msgstr "Obrázek" msgid "images" msgstr "Obrázky" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stock" @@ -117,11 +117,11 @@ msgstr "Stock" msgid "stocks" msgstr "Zásoby" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Objednat produkt" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Objednat produkty" @@ -129,7 +129,7 @@ msgstr "Objednat produkty" msgid "children" msgstr "Děti" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfigurace" @@ -181,7 +181,7 @@ msgstr "Momental" msgid "successful" msgstr "Úspěšné" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Vstup/výstup mezipaměti" @@ -205,7 +205,7 @@ msgstr "Získání vystavitelných parametrů aplikace" msgid "send a message to the support team" msgstr "Odeslání zprávy týmu podpory" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Vyžádejte si adresu URL s protokolem CORS. Povoleno pouze https." @@ -446,7 +446,7 @@ msgstr "" " s použitím zůstatku uživatele; pokud je použito `force_payment`, zahájí se " "transakce." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "zakoupení objednávky bez vytvoření účtu" @@ -736,232 +736,232 @@ msgstr "odstranit vztah objednávka-produkt" msgid "add or remove feedback on an order–product relation" msgstr "přidat nebo odebrat zpětnou vazbu na vztah objednávka-produkt." -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Vyhledávání" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Název" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategorie" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorie Slimáci" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Štítky" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Minimální cena" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Je aktivní" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Značka" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Atributy" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Množství" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Slug" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Je digitální" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Zahrnout podkategorie" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Zahrnout osobně objednané produkty" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Pro použití příznaku include_subcategories musí existovat category_uuid." -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Vyhledávání (ID, název produktu nebo číslo dílu)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Koupeno po (včetně)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Koupeno před (včetně)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "E-mail uživatele" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID uživatele" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Stav" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Lidsky čitelné ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Rodič" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Celá kategorie (má nebo nemá alespoň 1 produkt)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Úroveň" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID produktu" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Klíč k vyhledání v keši nebo nastavení do keše" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data k uložení do mezipaměti" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Časový limit v sekundách pro nastavení dat do mezipaměti" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Data uložená v mezipaměti" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Kamelizovaná data JSON z požadované adresy URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Přidání produktu do objednávky" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Objednávka {order_uuid} nebyla nalezena!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Odstranění všech produktů z objednávky" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Koupit objednávku" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Zadejte prosím order_uuid nebo order_hr_id - vzájemně se vylučují!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Provedení akce na seznamu produktů v objednávce" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Odebrat/přidat" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Akce musí být buď \"přidat\", nebo \"odebrat\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Provedení akce na seznamu produktů v seznamu přání" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Zadejte prosím hodnotu `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Seznam přání {wishlist_uuid} nenalezen!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Přidání produktu do objednávky" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Odstranění produktu z objednávky" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Koupit objednávku" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -969,41 +969,41 @@ msgstr "" "Prosím, pošlete atributy jako řetězec ve formátu " "attr1=hodnota1,attr2=hodnota2." -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Přidání nebo odstranění zpětné vazby pro objednávkuprodukt" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Akce musí být buď `add` nebo `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nenalezen!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Původní řetězec adresy zadaný uživatelem" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit musí být mezi 1 a 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funguje jako kouzlo" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Atributy" @@ -1016,11 +1016,11 @@ msgid "groups of attributes" msgstr "Skupiny atributů" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Značky" @@ -1029,7 +1029,7 @@ msgid "category image url" msgstr "Kategorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Procento přirážky" @@ -1052,7 +1052,7 @@ msgstr "Štítky pro tuto kategorii" msgid "products in this category" msgstr "Produkty v této kategorii" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Prodejci" @@ -1077,7 +1077,7 @@ msgid "represents feedback from a user." msgstr "Představuje zpětnou vazbu od uživatele." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Oznámení" @@ -1085,7 +1085,7 @@ msgstr "Oznámení" msgid "download url for this order product if applicable" msgstr "Stáhněte si url adresu pro tento objednaný produkt, pokud je to možné" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Zpětná vazba" @@ -1093,7 +1093,7 @@ msgstr "Zpětná vazba" msgid "a list of order products in this order" msgstr "Seznam objednaných produktů v tomto pořadí" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Fakturační adresa" @@ -1121,7 +1121,7 @@ msgstr "Jsou všechny produkty v objednávce digitální" msgid "transactions for this order" msgstr "Transakce pro tuto objednávku" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Objednávky" @@ -1133,19 +1133,19 @@ msgstr "Adresa URL obrázku" msgid "product's images" msgstr "Obrázky produktu" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Zpětná vazba" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Značka" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Skupiny atributů" @@ -1173,7 +1173,7 @@ msgstr "Počet zpětných vazeb" msgid "only available for personal orders" msgstr "Produkty jsou k dispozici pouze pro osobní objednávky" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produkty" @@ -1185,15 +1185,15 @@ msgstr "Propagační kódy" msgid "products on sale" msgstr "Produkty v prodeji" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Propagační akce" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Prodejce" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1201,11 +1201,11 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Seznamy přání" @@ -1213,7 +1213,7 @@ msgstr "Seznamy přání" msgid "tagged products" msgstr "Produkty s příznakem" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Štítky produktu" @@ -1299,7 +1299,7 @@ msgstr "Výsledky vyhledávání produktů" msgid "posts search results" msgstr "Výsledky vyhledávání produktů" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1312,23 +1312,23 @@ msgstr "" "užitečné pro efektivnější kategorizaci a správu atributů v komplexním " "systému." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Rodič této skupiny" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Nadřazená skupina atributů" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Název skupiny atributů" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Skupina atributů" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1346,41 +1346,49 @@ msgstr "" " další metadata a omezení, takže je vhodný pro použití v systémech, které " "komunikují s prodejci třetích stran." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Ukládá pověření a koncové body potřebné pro komunikaci s rozhraním API " "dodavatele." -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Informace o ověřování" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Definice přirážky pro produkty získané od tohoto dodavatele" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Procento přirážky prodejce" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Název tohoto prodejce" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Název prodejce" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "soubor s odpovědí" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "poslední odpověď prodejce na zpracování" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Cesta k integračnímu souboru prodejce" + +#: core/models.py:154 +msgid "integration path" +msgstr "Cesta integrace" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1394,27 +1402,27 @@ msgstr "" "přívětivého zobrazovacího názvu. Podporuje operace exportované " "prostřednictvím mixinů a poskytuje přizpůsobení metadat pro účely správy." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Interní identifikátor značky produktu" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Název štítku" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Uživatelsky přívětivý název pro značku produktu" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Štítek produktu" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1425,15 +1433,15 @@ msgstr "" "Obsahuje atributy pro interní identifikátor značky a uživatelsky přívětivý " "zobrazovací název." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "značka kategorie" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "štítky kategorií" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1455,51 +1463,51 @@ msgstr "" "kategorií a také přiřazovat atributy, jako jsou obrázky, značky nebo " "priorita." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Nahrát obrázek reprezentující tuto kategorii" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Obrázek kategorie" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Definovat procento přirážky pro produkty v této kategorii." -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Nadřízený této kategorie, který tvoří hierarchickou strukturu." -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Nadřazená kategorie" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Název kategorie" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Uveďte název této kategorie" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Přidejte podrobný popis této kategorie" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Popis kategorie" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "značky, které pomáhají popsat nebo seskupit tuto kategorii" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Priorita" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1512,47 +1520,47 @@ msgstr "" "přidružených kategorií, jedinečného slugu a pořadí důležitosti. Umožňuje " "organizaci a reprezentaci dat souvisejících se značkou v rámci aplikace." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Název této značky" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Název značky" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Nahrát logo reprezentující tuto značku" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Malý obrázek značky" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Nahrát velké logo reprezentující tuto značku" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Velká image značky" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Přidejte podrobný popis značky" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Popis značky" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Volitelné kategorie, se kterými je tato značka spojena" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1568,68 +1576,68 @@ msgstr "" "zásob, který umožňuje sledovat a vyhodnocovat produkty dostupné od různých " "dodavatelů." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Přidružený prodejce" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Prodejní cena" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Související produkt" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Množství na skladě" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU prodejce" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Digitální soubor spojený s touto zásobou, je-li to vhodné" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digitální soubor" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Zápisy do zásob" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1650,51 +1658,51 @@ msgstr "" " Používá se k definování a manipulaci s údaji o produktu a souvisejícími " "informacemi v rámci aplikace." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Kategorie, do které tento produkt patří" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Volitelně přiřadit tento produkt ke značce" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Označuje, zda je tento produkt dodáván digitálně" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Je produkt digitální" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Uveďte jasný identifikační název výrobku" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Název produktu" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Popis produktu" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Číslo dílu pro tento produkt" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Číslo dílu" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Skladová jednotka pro tento produkt" @@ -1762,11 +1770,11 @@ msgstr "Název tohoto atributu" msgid "attribute's name" msgstr "Název atributu" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "je filtrovatelný" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "určuje, zda lze tento atribut použít pro filtrování, nebo ne." @@ -1823,27 +1831,27 @@ msgstr "Text alt obrázku" msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Obrázek produktu" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Priorita zobrazení" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Obrázky produktů" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1858,39 +1866,39 @@ msgstr "" " podrobností o akci a její propojení s příslušnými produkty. Integruje se s " "katalogem produktů, aby bylo možné určit položky, kterých se kampaň týká." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Procento slevy" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Název akce" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Popis propagace" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Zahrnuté produkty" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Propagace" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1902,23 +1910,23 @@ msgstr "" "operace, jako je přidávání a odebírání produktů, a také operace pro " "přidávání a odebírání více produktů najednou." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Seznam přání" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1933,19 +1941,19 @@ msgstr "" "zpracování typu souboru a cesty k uložení souborů dokumentů. Rozšiřuje " "funkčnost konkrétních mixinů a poskytuje další vlastní funkce." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Dokumentární film" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Dokumentární filmy" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Nevyřešené" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1965,59 +1973,59 @@ msgstr "" " pro další zpracování nebo kontrolu. Třída také umožňuje přiřadit adresu k " "uživateli, což usnadňuje personalizované zpracování dat." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Adresní řádek pro zákazníka" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Adresní řádek" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Ulice" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Okres" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Město" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Poštovní směrovací číslo" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Země" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokace Bod(Zeměpisná délka, Zeměpisná šířka)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Úplná odpověď JSON z geokodéru pro tuto adresu" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Uložená odpověď JSON ze služby geokódování" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adresa" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresy" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2033,71 +2041,71 @@ msgstr "" "existuje) a stavu jeho použití. Obsahuje funkce pro ověření platnosti a " "použití propagačního kódu na objednávku při zajištění splnění omezení." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Jedinečný kód, který uživatel použije k uplatnění slevy." -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentuální sleva uplatněná v případě nevyužití pevné částky" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Procentuální sleva" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Časové razítko použití promokódu, prázdné, pokud ještě nebyl použit." -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Časové razítko použití" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Uživatel přiřazený k tomuto promokódu, je-li to relevantní" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Přiřazený uživatel" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Propagační kód" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Propagační kódy" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2105,16 +2113,16 @@ msgstr "" "Měl by být definován pouze jeden typ slevy (částka nebo procento), nikoli " "však oba typy slev nebo žádný z nich." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promokód {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2131,136 +2139,136 @@ msgstr "" "fakturaci. Stejně tak funkce podporuje správu produktů v životním cyklu " "objednávky." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Fakturační adresa použitá pro tuto objednávku" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Volitelný promo kód použitý na tuto objednávku" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Použitý promo kód" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Dodací adresa použitá pro tuto objednávku" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Dodací adresa" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Aktuální stav zakázky v jejím životním cyklu" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Stav objednávky" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON struktura oznámení pro zobrazení uživatelům, v uživatelském rozhraní " "administrátora se používá tabulkové zobrazení." -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON reprezentace atributů objednávky pro tuto objednávku" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Uživatel, který zadal objednávku" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Uživatel" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Časové razítko, kdy byla objednávka dokončena." -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Kupte si čas" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Lidsky čitelný identifikátor objednávky" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "lidsky čitelné ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Objednávka" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Uživatel smí mít vždy pouze jednu čekající objednávku!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Do objednávky, která není v procesu vyřizování, nelze přidat produkty." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Nelze přidat více produktů, než je dostupné na skladě" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "Nelze odebrat produkty z objednávky, která není nevyřízená." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "Fyzické produkty můžete zakoupit pouze se zadanou dodací adresou!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adresa neexistuje" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "V tuto chvíli nemůžete nakupovat, zkuste to prosím znovu za několik minut." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Bez uživatele nelze objednávku zakoupit!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Uživatel bez zůstatku nemůže nakupovat se zůstatkem!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2268,14 +2276,14 @@ msgstr "" "bez registrace nelze nakupovat, uveďte prosím následující údaje: jméno " "zákazníka, e-mail zákazníka, telefonní číslo zákazníka." -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Neplatný způsob platby: {payment_method} z {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2297,108 +2305,108 @@ msgstr "" "produktů. Model se integruje s modely objednávek a produktů a ukládá na ně " "odkaz." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Cena, kterou zákazník zaplatil za tento produkt v době nákupu." -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Interní připomínky" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Oznámení uživatele" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Objednávka rodičů" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Množství produktu" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Stav produktové řady" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct musí mít přiřazenou objednávku!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Špatně zadaná akce pro zpětnou vazbu: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "nelze poskytnout zpětnou vazbu na objednávku, která nebyla přijata" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Název" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "Adresa URL integrace" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Ověřovací pověření" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Můžete mít pouze jednoho výchozího poskytovatele CRM" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Odkaz na CRM objednávky" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Odkazy CRM objednávek" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2414,15 +2422,15 @@ msgstr "" "veřejně viditelné. Obsahuje metodu pro generování adresy URL pro stažení " "aktiva, když je přidružená objednávka ve stavu dokončena." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Stáhnout" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Ke stažení na" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2436,63 +2444,55 @@ msgstr "" "související produkt v objednávce a hodnocení přiřazené uživatelem. Třída " "využívá databázová pole k efektivnímu modelování a správě dat zpětné vazby." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Komentáře uživatelů o jejich zkušenostech s produktem" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Zpětná vazba" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Odkazuje na konkrétní produkt v objednávce, kterého se tato zpětná vazba " "týká." -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Související objednávka produktu" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Hodnocení produktu přidělené uživatelem" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Hodnocení produktu" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "pro přidání zpětné vazby musíte uvést komentář, hodnocení a uuid produktu." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Chyba při vytváření promokódu: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontaktujte nás" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "O nás" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Informace o platbě" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Dodávka" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2668,11 +2668,11 @@ msgstr "" "všechna práva\n" " vyhrazeno" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Jsou vyžadována data i časový limit" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Nesprávná hodnota timeoutu, musí být v rozmezí 0 až 216000 sekund." @@ -2704,7 +2704,7 @@ msgstr "K provedení této akce nemáte oprávnění." msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musí být nakonfigurován!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2765,15 +2765,23 @@ msgstr "Zpracovává globální vyhledávací dotazy." msgid "Handles the logic of buying as a business without registration." msgstr "Řeší logiku nákupu jako firmy bez registrace." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid je povinné" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Digitální aktivum můžete stáhnout pouze jednou" -#: core/views.py:315 +#: core/views.py:318 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." -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Objednaný produkt nemá produkt" + +#: core/views.py:359 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." @@ -2781,11 +2789,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2793,7 +2801,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2804,7 +2812,11 @@ msgstr "" "administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá" " funkci `redirect` Djanga." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Vrací aktuální verzi systému eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2818,7 +2830,7 @@ msgstr "" "na základě aktuální akce, přizpůsobitelných oprávnění a formátů " "vykreslování." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2832,7 +2844,7 @@ msgstr "" "standardizovaný způsob zpracování požadavků a odpovědí pro data " "AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2848,7 +2860,7 @@ msgstr "" "konkrétních polí nebo získávání podrobných a zjednodušených informací v " "závislosti na požadavku." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2862,7 +2874,7 @@ msgstr "" "pro různé akce používá příslušné serializátory. Možnosti filtrování jsou " "poskytovány prostřednictvím DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2876,7 +2888,7 @@ msgstr "" "kategorie. Sada pohledů také vynucuje oprávnění, aby zajistila, že ke " "konkrétním datům budou mít přístup pouze oprávnění uživatelé." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2888,7 +2900,7 @@ msgstr "" "rámec ViewSet Djanga pro zjednodušení implementace koncových bodů API pro " "objekty Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2906,7 +2918,7 @@ msgstr "" "podrobností o produktu, uplatňování oprávnění a přístup k související zpětné" " vazbě produktu." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2920,7 +2932,7 @@ msgstr "" "různých akcí. Účelem této třídy je poskytnout zjednodušený přístup ke " "zdrojům souvisejícím s Vendorem prostřednictvím rámce Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2936,7 +2948,7 @@ msgstr "" "objekty Zpětné vazby na základě oprávnění. Rozšiřuje základní třídu " "`EvibesViewSet` a využívá systém filtrování Djanga pro dotazování na data." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2954,7 +2966,7 @@ msgstr "" " Sada ViewSet používá několik serializátorů podle konkrétní prováděné akce a" " podle toho vynucuje oprávnění při interakci s daty objednávek." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2968,11 +2980,11 @@ msgstr "" " požadované akce. Kromě toho poskytuje podrobnou akci pro zpracování zpětné " "vazby na instance OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Spravuje operace související s obrázky produktů v aplikaci." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2980,15 +2992,15 @@ msgstr "" "Spravuje načítání a zpracování instancí PromoCode prostřednictvím různých " "akcí API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Představuje sadu zobrazení pro správu povýšení." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Zpracovává operace související s údaji o zásobách v systému." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3006,7 +3018,7 @@ msgstr "" "uživatelé mohou spravovat pouze své vlastní seznamy přání, pokud jim nejsou " "udělena výslovná oprávnění." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3020,12 +3032,12 @@ msgstr "" "přepisování serializátoru a zpracování oprávnění na základě kontextu " "požadavku." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Chyba v zeměpisném kódování: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo index 9e5ed830b769e30261df9f26b5e99bfa0aa93451..10149a1141d99305cb7479738853033158a76e52 100644 GIT binary patch delta 13084 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 W%#<|GGmnv>#~8T%=yQHWbN(0g0;!k) delta 12828 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 g^=!|x_;RSnZ+FvDp2U#dtEzeG`tSCu\n" "Language-Team: BRITISH ENGLISH \n" @@ -108,7 +108,7 @@ msgstr "Billede" msgid "images" msgstr "Billeder" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Lager" @@ -116,11 +116,11 @@ msgstr "Lager" msgid "stocks" msgstr "Aktier" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Bestil produkt" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Bestil produkter" @@ -128,7 +128,7 @@ msgstr "Bestil produkter" msgid "children" msgstr "Børn" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfig" @@ -180,7 +180,7 @@ msgstr "Momental" msgid "successful" msgstr "Succesfuld" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache-I/O" @@ -204,7 +204,7 @@ msgstr "Hent applikationens eksponerbare parametre" msgid "send a message to the support team" msgstr "Send en besked til supportteamet" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Anmod om en CORSed URL. Kun https er tilladt." @@ -443,7 +443,7 @@ msgstr "" "ved hjælp af brugerens saldo; hvis `force_payment` bruges, igangsættes en " "transaktion." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "Køb en ordre uden at oprette en konto" @@ -738,232 +738,232 @@ msgstr "slette en ordre-produkt-relation" msgid "add or remove feedback on an order–product relation" msgstr "tilføje eller fjerne feedback på en ordre-produkt-relation" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Søg efter" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Navn" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorier Snegle" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Min. pris" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Maks. pris" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Er aktiv" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Egenskaber" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Mængde" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Snegl" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Er digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Inkluder personligt bestilte produkter" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "VARENUMMER" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Der skal være en category_uuid for at bruge include_subcategories-flaget" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Søg (ID, produktnavn eller reservedelsnummer)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Købt efter (inklusive)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Købt før (inklusive)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Brugerens e-mail" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "Bruger UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Menneskeligt læsbart ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Forælder" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har mindst 1 produkt eller ej)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Niveau" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Produkt UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nøgle til at lede efter i eller lægge i cachen" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data, der skal gemmes i cachen" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder for at lægge data i cachen" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Cachelagrede data" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Cameliserede JSON-data fra den ønskede URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Kun URL'er, der starter med http(s)://, er tilladt." -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Tilføj et produkt til ordren" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke fundet!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Fjern alle produkter fra ordren" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Køb en ordre" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Angiv enten order_uuid eller order_hr_id - det udelukker hinanden!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Udfør en handling på en liste af produkter i ordren" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Fjern/tilføj" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Handlingen skal være enten \"tilføj\" eller \"fjern\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Udfør en handling på en liste af produkter i ønskelisten" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Angiv venligst værdien `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke fundet!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Tilføj et produkt til ordren" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra ordren" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Køb en ordre" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -971,41 +971,41 @@ msgstr "" "Send venligst attributterne som en streng formateret som " "attr1=værdi1,attr2=værdi2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Tilføj eller slet en feedback til ordreproduktet" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Handlingen skal være enten `add` eller `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Ordreprodukt {order_product_uuid} ikke fundet!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Original adressestreng leveret af brugeren" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Grænsen skal være mellem 1 og 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Egenskaber" @@ -1018,11 +1018,11 @@ msgid "groups of attributes" msgstr "Grupper af attributter" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Mærker" @@ -1031,7 +1031,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Markup-procentdel" @@ -1056,7 +1056,7 @@ msgstr "Tags for denne kategori" msgid "products in this category" msgstr "Produkter i denne kategori" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Leverandører" @@ -1083,7 +1083,7 @@ msgid "represents feedback from a user." msgstr "Repræsenterer feedback fra en bruger." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Meddelelser" @@ -1091,7 +1091,7 @@ msgstr "Meddelelser" msgid "download url for this order product if applicable" msgstr "Download url for dette ordreprodukt, hvis det er relevant" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Feedback" @@ -1099,7 +1099,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne ordre" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Faktureringsadresse" @@ -1127,7 +1127,7 @@ msgstr "Er alle produkterne i ordren digitale?" msgid "transactions for this order" msgstr "Transaktioner for denne ordre" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Bestillinger" @@ -1139,19 +1139,19 @@ msgstr "Billed-URL" msgid "product's images" msgstr "Produktets billeder" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Tilbagemeldinger" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Attributgrupper" @@ -1179,7 +1179,7 @@ msgstr "Antal tilbagemeldinger" msgid "only available for personal orders" msgstr "Produkter kun tilgængelige for personlige bestillinger" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produkter" @@ -1191,15 +1191,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter til salg" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Kampagner" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1207,11 +1207,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Ønskelister" @@ -1219,7 +1219,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Mærkede produkter" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Produktmærker" @@ -1305,7 +1305,7 @@ msgstr "Søgeresultater for produkter" msgid "posts search results" msgstr "Søgeresultater for produkter" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1318,23 +1318,23 @@ msgstr "" "struktur. Dette kan være nyttigt til at kategorisere og styre attributter " "mere effektivt i et komplekst system." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Forælder til denne gruppe" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Overordnet attributgruppe" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Attributgruppens navn" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Attributgruppe" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1353,41 +1353,49 @@ msgstr "" "begrænsninger, hvilket gør den velegnet til brug i systemer, der interagerer" " med tredjepartsleverandører." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Gemmer legitimationsoplysninger og slutpunkter, der er nødvendige for " "leverandørens API-kommunikation" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Oplysninger om godkendelse" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Definer markeringen for produkter, der hentes fra denne leverandør" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Sælgerens markup-procentdel" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Navn på denne leverandør" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "Svarfil" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "leverandørens sidste behandlingssvar" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Leverandørens sti til integrationsfilen" + +#: core/models.py:154 +msgid "integration path" +msgstr "Integrationsvej" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1402,27 +1410,27 @@ msgstr "" "operationer, der eksporteres gennem mixins, og giver mulighed for tilpasning" " af metadata til administrative formål." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Intern tag-identifikator for produkttagget" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tag-navn" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Brugervenligt navn til produktmærket" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Navn på tag-visning" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Produktmærke" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1433,15 +1441,15 @@ msgstr "" "produkter. Den indeholder attributter til en intern tag-identifikator og et " "brugervenligt visningsnavn." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "Kategori-tag" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "Kategori-tags" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1463,51 +1471,51 @@ msgstr "" " angive navn, beskrivelse og hierarki for kategorier samt tildele " "attributter som billeder, tags eller prioritet." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Upload et billede, der repræsenterer denne kategori" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Kategori billede" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Definer en markup-procentdel for produkter i denne kategori" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Forælder til denne kategori for at danne en hierarkisk struktur" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Giv et navn til denne kategori" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Tilføj en detaljeret beskrivelse af denne kategori" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Beskrivelse af kategori" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tags, der hjælper med at beskrive eller gruppere denne kategori" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioritet" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1521,47 +1529,47 @@ msgstr "" " Den gør det muligt at organisere og repræsentere brand-relaterede data i " "applikationen." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Navnet på dette mærke" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Varemærke" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Upload et logo, der repræsenterer dette brand" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Brandets lille image" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Upload et stort logo, der repræsenterer dette brand" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Brandets store image" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Tilføj en detaljeret beskrivelse af brandet" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Varemærkebeskrivelse" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier, som dette brand er forbundet med" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1577,68 +1585,68 @@ msgstr "" "muliggøre sporing og evaluering af produkter, der er tilgængelige fra " "forskellige leverandører." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Salgspris" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Tilknyttet produkt" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Den pris, der er betalt til sælgeren for dette produkt" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Antal på lager" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digital fil" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Lagerposteringer" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1658,51 +1666,51 @@ msgstr "" " egenskaber for at forbedre ydeevnen. Den bruges til at definere og " "manipulere produktdata og tilhørende oplysninger i en applikation." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Kategori, som dette produkt tilhører" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Tilknyt eventuelt dette produkt til et brand" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Angiver, om dette produkt leveres digitalt" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Er produktet digitalt?" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Giv produktet et klart identificerende navn" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Produktets navn" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Reservedelsnummer for dette produkt" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Varenummer" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Lagerbeholdning for dette produkt" @@ -1770,11 +1778,11 @@ msgstr "Navn på denne attribut" msgid "attribute's name" msgstr "Attributtens navn" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Hvilke attributter og værdier, der kan bruges til at filtrere denne " @@ -1834,27 +1842,27 @@ msgstr "Billedets alt-tekst" msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Produktbillede" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Skærm-prioritet" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Produktbilleder" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1870,39 +1878,39 @@ msgstr "" "relevante produkter. Den integreres med produktkataloget for at bestemme de " "berørte varer i kampagnen." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Rabatprocent" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Navn på kampagne" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Inkluderede produkter" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Forfremmelse" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1915,23 +1923,23 @@ msgstr "" "produkter samt operationer til at tilføje og fjerne flere produkter på én " "gang." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1947,19 +1955,19 @@ msgstr "" "dokumentarfilerne. Den udvider funktionaliteten fra specifikke mixins og " "giver yderligere brugerdefinerede funktioner." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Dokumentarfilm" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Uafklaret" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1980,59 +1988,59 @@ msgstr "" "Klassen gør det også muligt at knytte en adresse til en bruger, hvilket " "letter personlig datahåndtering." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Adresselinje til kunden" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Adresselinje" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Gade" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Distrikt" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "By" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Postnummer" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Land" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (længdegrad, breddegrad)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Fuldt JSON-svar fra geokoderen for denne adresse" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Gemt JSON-svar fra geokodningstjenesten" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adresse" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresser" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2048,72 +2056,72 @@ msgstr "" " for dens brug. Den indeholder funktionalitet til at validere og anvende " "kampagnekoden på en ordre og samtidig sikre, at begrænsningerne er opfyldt." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Unik kode, der bruges af en bruger til at indløse en rabat" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Procentvis rabat" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Slut gyldighedstid" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Start gyldighedstid" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tidsstempel, hvor promokoden blev brugt, blank, hvis den ikke er brugt endnu" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Tildelt bruger" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Kampagnekode" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Kampagnekoder" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2121,16 +2129,16 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2147,138 +2155,138 @@ msgstr "" " eller faktureringsoplysninger kan opdateres. Ligeledes understøtter " "funktionaliteten håndtering af produkterne i ordrens livscyklus." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Den faktureringsadresse, der bruges til denne ordre" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Valgfri kampagnekode anvendt på denne ordre" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Anvendt kampagnekode" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Den leveringsadresse, der er brugt til denne ordre" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Ordrens aktuelle status i dens livscyklus" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Bestillingsstatus" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges" " tabelvisningen" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON-repræsentation af ordreattributter for denne ordre" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Den bruger, der har afgivet ordren" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Bruger" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Tidsstemplet for, hvornår ordren blev afsluttet" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Køb tid" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "En menneskeligt læsbar identifikator for ordren" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "menneskeligt læsbart ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Bestil" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "En bruger må kun have én afventende ordre ad gangen!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "Du kan ikke tilføje produkter til en ordre, der ikke er i gang." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Du kan ikke tilføje flere produkter, end der er på lager" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgslen <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan kun købe fysiske produkter med angivet leveringsadresse!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adressen findes ikke" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "Du kan ikke købe i øjeblikket, prøv venligst igen om et par minutter." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "En bruger uden saldo kan ikke købe med saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2286,14 +2294,14 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2315,110 +2323,110 @@ msgstr "" "en download-URL for digitale produkter. Modellen integreres med Order- og " "Product-modellerne og gemmer en reference til dem." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Den pris, som kunden har betalt for dette produkt på købstidspunktet" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Notifikationer til brugere" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Forældreordre" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Produktmængde" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status for produktlinje" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct skal have en tilknyttet ordre!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Forkert handling angivet for feedback: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" "Du kan ikke fjerne produkter fra en ordre, der ikke er en igangværende " "ordre." -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Navn" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL til integrationen" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Legitimationsoplysninger til godkendelse" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Du kan kun have én standard CRM-udbyder" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM'er" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Ordrens CRM-link" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Bestillingernes CRM-links" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2435,15 +2443,15 @@ msgstr "" "URL til download af aktivet, når den tilknyttede ordre har status som " "afsluttet." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Download" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Downloads" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2458,64 +2466,56 @@ msgstr "" "bruger databasefelter til effektivt at modellere og administrere " "feedbackdata." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Brugernes kommentarer om deres oplevelse med produktet" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Kommentarer til feedback" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Henviser til det specifikke produkt i en ordre, som denne feedback handler " "om" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Relateret ordreprodukt" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Brugertildelt vurdering af produktet" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Produktvurdering" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Du skal angive en kommentar, en vurdering og et produkt-uid for at tilføje " "feedback." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Fejl under oprettelse af promokode: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Hjem" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt os" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Om os" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Oplysninger om betaling" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Levering" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2690,11 +2690,11 @@ msgstr "" "alle rettigheder\n" " forbeholdt" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Både data og timeout er påkrævet" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ugyldig timeout-værdi, den skal være mellem 0 og 216000 sekunder" @@ -2726,7 +2726,7 @@ msgstr "Du har ikke tilladelse til at udføre denne handling." msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL skal være konfigureret!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2789,15 +2789,23 @@ msgstr "Håndterer globale søgeforespørgsler." msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken i at købe som en virksomhed uden registrering." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid er påkrævet" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Du kan kun downloade det digitale aktiv én gang" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "Ordren skal betales, før det digitale aktiv downloades." -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Ordreproduktet har ikke et produkt" + +#: core/views.py:359 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." @@ -2805,11 +2813,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "Favicon ikke fundet" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2817,7 +2825,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2828,7 +2836,11 @@ msgstr "" "administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion " "til at håndtere HTTP-omdirigeringen." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Returnerer den aktuelle version af eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2842,7 +2854,7 @@ msgstr "" "understøttelse af dynamiske serializer-klasser baseret på den aktuelle " "handling, tilladelser, der kan tilpasses, og gengivelsesformater." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2856,7 +2868,7 @@ msgstr "" "API-lag og giver en standardiseret måde at behandle anmodninger og svar for " "AttributeGroup-data på." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2872,7 +2884,7 @@ msgstr "" "data, f.eks. filtrering efter specifikke felter eller hentning af " "detaljerede eller forenklede oplysninger afhængigt af anmodningen." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2886,7 +2898,7 @@ msgstr "" "mekanismer og bruger passende serializers til forskellige handlinger. " "Filtreringsfunktioner leveres gennem DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2900,7 +2912,7 @@ msgstr "" "serialisering af kategoridata. ViewSet håndhæver også tilladelser for at " "sikre, at kun autoriserede brugere kan få adgang til specifikke data." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2912,7 +2924,7 @@ msgstr "" "objekter. Den bruger Djangos ViewSet-rammeværk til at forenkle " "implementeringen af API-slutpunkter for Brand-objekter." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2930,7 +2942,7 @@ msgstr "" " til at hente produktoplysninger, anvende tilladelser og få adgang til " "relateret feedback om et produkt." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2945,7 +2957,7 @@ msgstr "" "strømlinet adgang til Vendor-relaterede ressourcer gennem Django REST-" "frameworket." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2962,7 +2974,7 @@ msgstr "" " basen `EvibesViewSet` og gør brug af Djangos filtreringssystem til at " "forespørge på data." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2981,7 +2993,7 @@ msgstr "" "baseret på den specifikke handling, der udføres, og håndhæver tilladelser i " "overensstemmelse hermed, mens der interageres med ordredata." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2996,11 +3008,11 @@ msgstr "" "Derudover indeholder det en detaljeret handling til håndtering af feedback " "på OrderProduct-instanser." -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Håndterer operationer relateret til produktbilleder i applikationen." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3008,15 +3020,15 @@ msgstr "" "Administrerer hentning og håndtering af PromoCode-instanser gennem " "forskellige API-handlinger." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Repræsenterer et visningssæt til håndtering af kampagner." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operationer relateret til lagerdata i systemet." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3034,7 +3046,7 @@ msgstr "" "integreret for at sikre, at brugere kun kan administrere deres egne " "ønskelister, medmindre der er givet eksplicitte tilladelser." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3048,12 +3060,12 @@ msgstr "" "omfatter specialiseret adfærd for forskellige HTTP-metoder, tilsidesættelse " "af serializer og håndtering af tilladelser baseret på anmodningskonteksten." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fejl i geokodning: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo index 6e3ac55450ea7aed09f2d0f7bf9108cdbd88586e..1d76685da33d4aad2fa4c485286e5ceb2ddbe087 100644 GIT binary patch delta 13077 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 b=@XxtkVt8Yr~aT`i3zE@+PCzpkmdgXK5@6I delta 12822 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 BRh9q% diff --git a/core/locale/de_DE/LC_MESSAGES/django.po b/core/locale/de_DE/LC_MESSAGES/django.po index 66817bd7..dcb0894c 100644 --- a/core/locale/de_DE/LC_MESSAGES/django.po +++ b/core/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Lagerbestand" @@ -118,11 +118,11 @@ msgstr "Lagerbestand" msgid "stocks" msgstr "Bestände" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Produkt bestellen" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Produkte bestellen" @@ -130,7 +130,7 @@ msgstr "Produkte bestellen" msgid "children" msgstr "Kinder" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfigurieren Sie" @@ -182,7 +182,7 @@ msgstr "Momente" msgid "successful" msgstr "Erfolgreich" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -206,7 +206,7 @@ msgstr "Abrufen der exponierbaren Parameter der Anwendung" msgid "send a message to the support team" msgstr "Senden Sie eine Nachricht an das Support-Team" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Fordern Sie eine CORS-gesicherte URL an. Nur https erlaubt." @@ -454,7 +454,7 @@ msgstr "" "wird der Kauf mit dem Guthaben des Benutzers abgeschlossen; bei Verwendung " "von \"force_payment\" wird eine Transaktion ausgelöst." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "eine Bestellung kaufen, ohne ein Konto anzulegen" @@ -764,278 +764,278 @@ msgid "add or remove feedback on an order–product relation" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Suche" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Name" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategorien" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorien Schnecken" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Mindestpreis" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Maximaler Preis" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Ist aktiv" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Marke" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Attribute" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Menge" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Schnecke" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Unterkategorien einbeziehen" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Persönlich bestellte Produkte einbeziehen" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Es muss eine category_uuid vorhanden sein, um das Flag include_subcategories" " zu verwenden" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Suche (ID, Produktname oder Teilenummer)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Gekauft nach (einschließlich)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Gekauft vor (einschließlich)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Benutzer-E-Mail" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Elternteil" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Gesamte Kategorie (mit oder ohne mindestens 1 Produkt)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Ebene" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Produkt UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Schlüssel, der im Cache zu suchen oder in den Cache zu legen ist" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Im Cache zu speichernde Daten" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in Sekunden, um die Daten in den Cache zu stellen" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Zwischengespeicherte Daten" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-Daten aus der angeforderten URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Auftrag {order_uuid} nicht gefunden!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Alle Produkte aus der Bestellung entfernen" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Eine Bestellung kaufen" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Bitte geben Sie entweder order_uuid oder order_hr_id an - beide schließen " "sich gegenseitig aus!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Eine Aktion für eine Liste von Produkten in der Bestellung ausführen" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Entfernen/Hinzufügen" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Aktion muss entweder \"Hinzufügen\" oder \"Entfernen\" sein!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" "Ausführen einer Aktion für eine Liste von Produkten in der Wunschliste" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Bitte geben Sie den Wert `wishlist_uuid` an." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nicht gefunden!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Ein Produkt zur Bestellung hinzufügen" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Ein Produkt aus der Bestellung entfernen" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Eine Bestellung kaufen" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Bitte senden Sie die Attribute als String im Format attr1=wert1,attr2=wert2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" "Feedback zu einer Bestellung-Produkt-Beziehung hinzufügen oder entfernen" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Aktion muss entweder `Add` oder `remove` sein!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestellprodukt {order_product_uuid} nicht gefunden!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Vom Benutzer angegebene Originaladresse" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Der Grenzwert muss zwischen 1 und 10 liegen." -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funktioniert wie ein Zauber" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Attribute" @@ -1048,11 +1048,11 @@ msgid "groups of attributes" msgstr "Gruppen von Attributen" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategorien" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Marken" @@ -1061,7 +1061,7 @@ msgid "category image url" msgstr "Kategorien" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Markup Percentage" @@ -1086,7 +1086,7 @@ msgstr "Tags für diese Kategorie" msgid "products in this category" msgstr "Produkte in dieser Kategorie" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Anbieter" @@ -1112,7 +1112,7 @@ msgid "represents feedback from a user." msgstr "Stellt das Feedback eines Benutzers dar." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Benachrichtigungen" @@ -1120,7 +1120,7 @@ msgstr "Benachrichtigungen" msgid "download url for this order product if applicable" msgstr "Download-Url für dieses Bestellprodukt, falls zutreffend" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Rückmeldung" @@ -1128,7 +1128,7 @@ msgstr "Rückmeldung" msgid "a list of order products in this order" msgstr "Eine Liste der bestellten Produkte in dieser Reihenfolge" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Rechnungsadresse" @@ -1156,7 +1156,7 @@ msgstr "Sind alle Produkte in der Bestellung digital" msgid "transactions for this order" msgstr "Vorgänge für diesen Auftrag" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Bestellungen" @@ -1168,19 +1168,19 @@ msgstr "Bild URL" msgid "product's images" msgstr "Bilder des Produkts" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategorie" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Rückmeldungen" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Marke" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Attribut-Gruppen" @@ -1208,7 +1208,7 @@ msgstr "Anzahl der Rückmeldungen" msgid "only available for personal orders" msgstr "Produkte nur für persönliche Bestellungen verfügbar" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produkte" @@ -1220,15 +1220,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Werbeaktionen" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Anbieter" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1236,11 +1236,11 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Wunschzettel" @@ -1248,7 +1248,7 @@ msgstr "Wunschzettel" msgid "tagged products" msgstr "Markierte Produkte" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Produkt-Tags" @@ -1334,7 +1334,7 @@ msgstr "Suchergebnisse für Produkte" msgid "posts search results" msgstr "Suchergebnisse für Produkte" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1347,23 +1347,23 @@ msgstr "" "eine hierarchische Struktur bildet. Dies kann nützlich sein, um Attribute in" " einem komplexen System effektiver zu kategorisieren und zu verwalten." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Elternteil dieser Gruppe" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Übergeordnete Attributgruppe" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Name der Attributgruppe" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Attribut-Gruppe" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1382,43 +1382,51 @@ msgstr "" "verwaltet auch zusätzliche Metadaten und Einschränkungen, wodurch es sich " "für die Verwendung in Systemen eignet, die mit Drittanbietern interagieren." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Speichert Anmeldeinformationen und Endpunkte, die für die API-Kommunikation " "des Anbieters erforderlich sind" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Informationen zur Authentifizierung" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieren Sie den Aufschlag für Produkte, die von diesem Lieferanten " "bezogen werden" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Prozentualer Aufschlag des Lieferanten" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Name dieses Anbieters" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Name des Anbieters" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "Antwortdatei" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "die letzte Verarbeitungsantwort des Lieferanten" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Pfad der Integrationsdatei des Anbieters" + +#: core/models.py:154 +msgid "integration path" +msgstr "Integrationspfad" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1433,27 +1441,27 @@ msgstr "" "Sie unterstützt Operationen, die über Mixins exportiert werden, und " "ermöglicht die Anpassung von Metadaten für Verwaltungszwecke." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Interner Tag-Identifikator für das Produkt-Tag" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tag name" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Benutzerfreundlicher Name für den Produktanhänger" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Tag-Anzeigename" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Produkt-Tag" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1464,15 +1472,15 @@ msgstr "" "zuzuordnen und zu klassifizieren. Sie enthält Attribute für einen internen " "Tag-Bezeichner und einen benutzerfreundlichen Anzeigenamen." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "Kategorie-Tag" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "Kategorie-Tags" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1495,53 +1503,53 @@ msgstr "" " Beschreibung und die Hierarchie von Kategorien festzulegen sowie Attribute " "wie Bilder, Tags oder Priorität zuzuweisen." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Laden Sie ein Bild hoch, das diese Kategorie repräsentiert" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Kategorie Bild" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" "Definieren Sie einen prozentualen Aufschlag für Produkte in dieser Kategorie" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "" "Übergeordneter dieser Kategorie, um eine hierarchische Struktur zu bilden" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Übergeordnete Kategorie" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Name der Kategorie" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Geben Sie einen Namen für diese Kategorie an" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Fügen Sie eine detaillierte Beschreibung für diese Kategorie hinzu" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Beschreibung der Kategorie" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "Tags, die helfen, diese Kategorie zu beschreiben oder zu gruppieren" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Priorität" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1555,48 +1563,48 @@ msgstr "" "der Prioritätsreihenfolge. Sie ermöglicht die Organisation und Darstellung " "von markenbezogenen Daten innerhalb der Anwendung." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Name dieser Marke" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Markenname" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Laden Sie ein Logo hoch, das diese Marke repräsentiert" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Marke kleines Bild" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Laden Sie ein großes Logo hoch, das diese Marke repräsentiert" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Großes Image der Marke" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Fügen Sie eine detaillierte Beschreibung der Marke hinzu" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Beschreibung der Marke" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "" "Optionale Kategorien, mit denen diese Marke in Verbindung gebracht wird" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategorien" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1612,69 +1620,69 @@ msgstr "" "Bestandsverwaltungssystems, um die Nachverfolgung und Bewertung der von " "verschiedenen Anbietern verfügbaren Produkte zu ermöglichen." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Verkaufspreis" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Zugehöriges Produkt" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Der an den Verkäufer gezahlte Preis für dieses Produkt" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digitale Datei" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Bestandseinträge" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1696,52 +1704,52 @@ msgstr "" " um Produktdaten und die damit verbundenen Informationen innerhalb einer " "Anwendung zu definieren und zu manipulieren." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Kategorie, zu der dieses Produkt gehört" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Gibt an, ob dieses Produkt digital geliefert wird" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Ist das Produkt digital" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "" "Geben Sie einen eindeutigen Namen zur Identifizierung des Produkts an." -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Name des Produkts" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Beschreibung des Produkts" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Teilenummer für dieses Produkt" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Teilnummer" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Lagerhaltende Einheit für dieses Produkt" @@ -1810,11 +1818,11 @@ msgstr "Name dieses Attributs" msgid "attribute's name" msgstr "Name des Attributs" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "ist filterbar" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Welche Attribute und Werte können für die Filterung dieser Kategorie " @@ -1877,27 +1885,27 @@ msgstr "Bild-Alt-Text" msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Produktbild" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Priorität anzeigen" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Produktbilder" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1914,39 +1922,39 @@ msgstr "" "Sie ist mit dem Produktkatalog integriert, um die betroffenen Artikel in der" " Kampagne zu bestimmen." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Name der Aktion" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Enthaltene Produkte" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Förderung" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1959,23 +1967,23 @@ msgstr "" "Entfernen von Produkten sowie das Hinzufügen und Entfernen mehrerer Produkte" " gleichzeitig." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Wunschzettel" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1992,19 +2000,19 @@ msgstr "" " die Funktionalität von bestimmten Mixins und bietet zusätzliche " "benutzerdefinierte Funktionen." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Dokumentarfilme" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Ungelöst" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2026,59 +2034,59 @@ msgstr "" "ermöglicht es auch, eine Adresse mit einem Benutzer zu verknüpfen, was die " "personalisierte Datenverarbeitung erleichtert." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Adresszeile für den Kunden" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Adresszeile" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Straße" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Bezirk" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Stadt" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Postleitzahl" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Land" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Längengrad, Breitengrad)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Vollständige JSON-Antwort vom Geocoder für diese Adresse" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Gespeicherte JSON-Antwort vom Geokodierungsdienst" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adresse" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adressen" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2096,76 +2104,76 @@ msgstr "" "Validierung und Anwendung des Promo-Codes auf eine Bestellung, wobei " "sichergestellt wird, dass die Einschränkungen eingehalten werden." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "" "Einzigartiger Code, den ein Nutzer zum Einlösen eines Rabatts verwendet" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Zeitstempel, wann der Promocode verwendet wurde, leer, wenn noch nicht " "verwendet" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Promo-Code" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Promo-Codes" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2173,16 +2181,16 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für den Promocode {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2200,143 +2208,143 @@ msgstr "" "aktualisiert werden. Ebenso unterstützt die Funktionalität die Verwaltung " "der Produkte im Lebenszyklus der Bestellung." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Die für diese Bestellung verwendete Rechnungsadresse" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Optionaler Promo-Code für diese Bestellung" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Angewandter Promo-Code" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Die für diese Bestellung verwendete Lieferadresse" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Lieferadresse" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Status der Bestellung" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON-Struktur der Benachrichtigungen, die den Benutzern angezeigt werden " "sollen; in der Admin-UI wird die Tabellenansicht verwendet" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON-Darstellung der Auftragsattribute für diesen Auftrag" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Der Benutzer, der die Bestellung aufgegeben hat" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Benutzer" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Der Zeitstempel, zu dem der Auftrag abgeschlossen wurde" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Zeit kaufen" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Ein von Menschen lesbarer Identifikator für den Auftrag" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "menschenlesbare ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Bestellung" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Ein Benutzer darf immer nur einen schwebenden Auftrag haben!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Sie können keine Produkte zu einem Auftrag hinzufügen, der nicht in " "Bearbeitung ist." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Sie können nicht mehr Produkte hinzufügen, als auf Lager sind" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Sie können nur physische Produkte mit angegebener Lieferadresse kaufen!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adresse ist nicht vorhanden" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Sie können im Moment nicht kaufen, bitte versuchen Sie es in ein paar " "Minuten erneut." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Ein Benutzer ohne Guthaben kann nicht mit Guthaben kaufen!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2344,14 +2352,14 @@ msgstr "" "Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " "Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ungültige Zahlungsmethode: {payment_method} von {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2374,112 +2382,112 @@ msgstr "" "Produkte. Das Modell ist mit den Modellen \"Order\" und \"Product\" " "integriert und speichert einen Verweis auf diese." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Der Preis, den der Kunde zum Zeitpunkt des Kaufs für dieses Produkt bezahlt " "hat" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Interne Kommentare" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Produktmenge" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status der Produktlinie" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Das Bestellprodukt muss eine zugehörige Bestellung haben!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Falsche Aktion für Feedback angegeben: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" "Sie können keine Produkte aus einer Bestellung entfernen, die nicht in " "Bearbeitung ist." -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Name" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL der Integration" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Anmeldeinformationen zur Authentifizierung" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Sie können nur einen Standard-CRM-Anbieter haben" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "CRM-Link der Bestellung" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "CRM-Links der Bestellungen" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2496,15 +2504,15 @@ msgstr "" " zur Generierung einer URL für das Herunterladen des Assets, wenn sich die " "zugehörige Bestellung in einem abgeschlossenen Status befindet." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Herunterladen" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Herunterladen" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2519,64 +2527,56 @@ msgstr "" "Benutzer zugewiesene Bewertung. Die Klasse verwendet Datenbankfelder, um " "Feedbackdaten effektiv zu modellieren und zu verwalten." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Kommentare der Nutzer über ihre Erfahrungen mit dem Produkt" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Kommentare zum Feedback" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Verweist auf das spezifische Produkt in einer Bestellung, auf das sich diese" " Rückmeldung bezieht" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Produkt zur Bestellung" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Vom Benutzer zugewiesene Bewertung für das Produkt" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Produktbewertung" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Sie müssen einen Kommentar, eine Bewertung und eine Produktnummer angeben, " "um eine Bewertung abzugeben." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Fehler bei der Erstellung des Promocodes: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Startseite" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Über uns" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Zahlungsinformationen" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Lieferung" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2752,11 +2752,11 @@ msgstr "" "alle Rechte\n" " vorbehalten" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Sowohl Daten als auch Timeout sind erforderlich" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Ungültiger Timeout-Wert, er muss zwischen 0 und 216000 Sekunden liegen" @@ -2789,7 +2789,7 @@ msgstr "Sie haben nicht die Erlaubnis, diese Aktion durchzuführen." msgid "NOMINATIM_URL must be configured." msgstr "Der Parameter NOMINATIM_URL muss konfiguriert werden!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2854,17 +2854,25 @@ msgstr "Bearbeitet globale Suchanfragen." msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid ist erforderlich" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Sie können das digitale Asset nur einmal herunterladen" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "" "die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt " "werden" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Das Bestellprodukt hat kein Produkt" + +#: core/views.py:359 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." @@ -2872,11 +2880,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2884,7 +2892,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2895,7 +2903,11 @@ msgstr "" "Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von " "Django für die Bearbeitung der HTTP-Umleitung." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Gibt die aktuelle Version von eVibes zurück." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2909,7 +2921,7 @@ msgstr "" "enthält Unterstützung für dynamische Serialisiererklassen auf der Grundlage " "der aktuellen Aktion, anpassbare Berechtigungen und Rendering-Formate." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2923,7 +2935,7 @@ msgstr "" "API-Schicht der Anwendung und bietet eine standardisierte Methode zur " "Verarbeitung von Anfragen und Antworten für AttributeGroup-Daten." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2940,7 +2952,7 @@ msgstr "" "oder das Abrufen detaillierter bzw. vereinfachter Informationen je nach " "Anfrage." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2955,7 +2967,7 @@ msgstr "" " für verschiedene Aktionen. Filterfunktionen werden über das " "DjangoFilterBackend bereitgestellt." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2970,7 +2982,7 @@ msgstr "" "Berechtigungen, um sicherzustellen, dass nur autorisierte Benutzer auf " "bestimmte Daten zugreifen können." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2982,7 +2994,7 @@ msgstr "" "Objekten. Sie verwendet das ViewSet-Framework von Django, um die " "Implementierung von API-Endpunkten für Brand-Objekte zu vereinfachen." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3001,7 +3013,7 @@ msgstr "" "zur Anwendung von Berechtigungen und zum Zugriff auf zugehörige " "Rückmeldungen zu einem Produkt." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3016,7 +3028,7 @@ msgstr "" "dieser Klasse ist die Bereitstellung eines optimierten Zugriffs auf Vendor-" "Ressourcen über das Django REST-Framework." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3033,7 +3045,7 @@ msgstr "" "implementieren. Es erweitert das Basis `EvibesViewSet` und nutzt das " "Filtersystem von Django zur Abfrage von Daten." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3053,7 +3065,7 @@ msgstr "" "basieren, die durchgeführt wird, und erzwingt die entsprechenden " "Berechtigungen, während es mit den Bestelldaten interagiert." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3068,12 +3080,12 @@ msgstr "" "Außerdem bietet es eine detaillierte Aktion für die Bearbeitung von Feedback" " zu OrderProduct-Instanzen" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" "Verwaltet Vorgänge im Zusammenhang mit Produktbildern in der Anwendung." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3081,15 +3093,15 @@ msgstr "" "Verwaltet den Abruf und die Handhabung von PromoCode-Instanzen durch " "verschiedene API-Aktionen." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Stellt ein Ansichtsset für die Verwaltung von Werbeaktionen dar." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Erledigt Vorgänge im Zusammenhang mit Bestandsdaten im System." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3108,7 +3120,7 @@ msgstr "" "nur ihre eigenen Wunschlisten verwalten können, sofern keine expliziten " "Berechtigungen erteilt wurden." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3123,12 +3135,12 @@ msgstr "" "HTTP-Methoden, Serialisierungsüberschreibungen und die Behandlung von " "Berechtigungen auf der Grundlage des Anfragekontexts." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocodierungsfehler: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo index f2df83a72d427cf0357153bbe8141623684648b5..f9d50cbd97df2e26e546191dfa91986e80ea30c2 100644 GIT binary patch delta 13104 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 P;yl&;GgB*iX88XPp$l<1 diff --git a/core/locale/en_GB/LC_MESSAGES/django.po b/core/locale/en_GB/LC_MESSAGES/django.po index 82c2bb53..0b89f4ca 100644 --- a/core/locale/en_GB/LC_MESSAGES/django.po +++ b/core/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -112,7 +112,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stock" @@ -120,11 +120,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Order Product" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Order Products" @@ -132,7 +132,7 @@ msgstr "Order Products" msgid "children" msgstr "Children" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Config" @@ -184,7 +184,7 @@ msgstr "Momental" msgid "successful" msgstr "Successful" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -208,7 +208,7 @@ msgstr "Get application's exposable parameters" msgid "send a message to the support team" msgstr "Send a message to the support team" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." @@ -434,7 +434,7 @@ msgstr "" "completed using the user's balance; If `force_payment` is used, a " "transaction is initiated." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "purchase an order without account creation" @@ -716,231 +716,231 @@ msgstr "delete an order–product relation" msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Search" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Name" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Categories" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Min Price" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Is Active" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Attributes" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Quantity" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Slug" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Include sub-categories" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "There must be a category_uuid to use include_subcategories flag" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "User email" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Parent" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Level" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Product UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data to store in cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Cached data" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Add a product to the order" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Buy an order" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Remove/Add" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Please provide `wishlist_uuid` value." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Buy an order" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -948,41 +948,41 @@ msgstr "" "Please send the attributes as the string formatted like " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Attributes" @@ -995,11 +995,11 @@ msgid "groups of attributes" msgstr "Groups of attributes" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Brands" @@ -1008,7 +1008,7 @@ msgid "category image url" msgstr "Categories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Markup Percentage" @@ -1030,7 +1030,7 @@ msgstr "Tags for this category" msgid "products in this category" msgstr "Products in this category" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Vendors" @@ -1055,7 +1055,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Notifications" @@ -1063,7 +1063,7 @@ msgstr "Notifications" msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Feedback" @@ -1071,7 +1071,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Billing address" @@ -1099,7 +1099,7 @@ msgstr "Are all of the products in the order digital" msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Orders" @@ -1111,19 +1111,19 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Attribute groups" @@ -1151,7 +1151,7 @@ msgstr "Number of feedbacks" msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Products" @@ -1163,15 +1163,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1179,11 +1179,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Wishlists" @@ -1191,7 +1191,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Product tags" @@ -1276,7 +1276,7 @@ msgstr "Products search results" msgid "posts search results" msgstr "Products search results" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1288,23 +1288,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Parent of this group" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Parent attribute group" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Attribute group" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1322,40 +1322,48 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "response file" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "vendor's last processing response" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Vendor's integration file path" + +#: core/models.py:154 +msgid "integration path" +msgstr "Integration path" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1369,27 +1377,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tag name" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Product tag" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1399,15 +1407,15 @@ msgstr "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "category tag" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "category tags" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1429,51 +1437,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Category image" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Parent category" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Category name" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Category description" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Priority" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1487,47 +1495,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Brand name" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Brand description" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Categories" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1543,68 +1551,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Selling price" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Associated product" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digital file" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1624,51 +1632,51 @@ msgstr "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Product name" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Product description" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Part number" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" @@ -1736,11 +1744,11 @@ msgstr "Name of this attribute" msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "is filterable" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "designates whether this attribute can be used for filtering or not" @@ -1797,27 +1805,27 @@ msgstr "Image alt text" msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Product image" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Display priority" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Product images" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1833,39 +1841,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Included products" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promotion" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1877,23 +1885,23 @@ msgstr "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1909,19 +1917,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documentary" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1941,59 +1949,59 @@ msgstr "" "responses for further processing or inspection. The class also allows " "associating an address with a user, facilitating personalized data handling." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Address line" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Street" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "District" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "City" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Postal code" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Country" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Address" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresses" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2009,71 +2017,71 @@ msgstr "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Promo code" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2081,16 +2089,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2106,135 +2114,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Order status" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" "view is used" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "User" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Buy time" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Order" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "You cannot add products to an order that is not a pending one" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "You cannot remove products from an order that is not a pending one" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "You can not purchase at this moment, please try again in a few minutes." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2242,14 +2250,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2271,108 +2279,108 @@ msgstr "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "The price paid by the customer for this product at purchase time" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Parent order" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Product line status" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Name" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2388,15 +2396,15 @@ msgstr "" " is publicly visible. It includes a method to generate a URL for downloading" " the asset when the associated order is in a completed status." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Download" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Downloads" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2410,62 +2418,54 @@ msgstr "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "References the specific product in an order that this feedback is about" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Related order product" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Product rating" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "you must provide a comment, rating, and order product uuid to add feedback." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Error during promocode creation: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Contact Us" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "About Us" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Payment Information" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Delivery" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2640,11 +2640,11 @@ msgstr "" "All rights\n" " reserved" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Both data and timeout are required" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" @@ -2676,7 +2676,7 @@ msgstr "You do not have permission to perform this action." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2738,15 +2738,23 @@ msgstr "Handles global search queries." msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid is required" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "The order product does not have a product" + +#: core/views.py:359 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." @@ -2754,11 +2762,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon not found" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2766,7 +2774,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2776,7 +2784,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." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Returns current version of the eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2790,7 +2802,7 @@ msgstr "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2804,7 +2816,7 @@ msgstr "" "provides a standardized way to process requests and responses for " "AttributeGroup data." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2820,7 +2832,7 @@ msgstr "" "specific fields or retrieving detailed versus simplified information " "depending on the request." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2834,7 +2846,7 @@ msgstr "" "mechanisms and uses appropriate serializers for different actions. Filtering" " capabilities are provided through the DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2848,7 +2860,7 @@ msgstr "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2860,7 +2872,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2878,7 +2890,7 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2892,7 +2904,7 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2908,7 +2920,7 @@ msgstr "" " accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2926,7 +2938,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2940,11 +2952,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2952,15 +2964,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2978,7 +2990,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2992,12 +3004,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo index 92c7108f868c3ffa07686c3d49e5248772390a54..5608f2218d3921cd98f07e2cd6b9bd210b960ee3 100644 GIT binary patch delta 13096 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 IZ&JX20Nr56_y7O^ delta 12838 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -108,7 +108,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stock" @@ -116,11 +116,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Order Product" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Order Products" @@ -128,7 +128,7 @@ msgstr "Order Products" msgid "children" msgstr "Children" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Config" @@ -180,7 +180,7 @@ msgstr "Momental" msgid "successful" msgstr "Successful" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -204,7 +204,7 @@ msgstr "Get application's exposable parameters" msgid "send a message to the support team" msgstr "Send a message to the support team" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Request a CORSed URL. Only https allowed." @@ -430,7 +430,7 @@ msgstr "" "completed using the user's balance; If `force_payment` is used, a " "transaction is initiated." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "purchase an order without account creation" @@ -712,231 +712,231 @@ msgstr "delete an order–product relation" msgid "add or remove feedback on an order–product relation" msgstr "add or remove feedback on an order–product relation" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "No search term provided." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Search" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Name" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Categories" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Categories Slugs" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Min Price" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Is Active" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Attributes" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Quantity" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Slug" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Include sub-categories" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Include personal ordered products" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "There must be a category_uuid to use include_subcategories flag" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Search (ID, product name or part number)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Bought after (inclusive)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Bought before (inclusive)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "User email" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "User UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Parent" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Whole category(has at least 1 product or not)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Level" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Product UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Key to look for in or set into the cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data to store in cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in seconds to set the data for into the cache" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Cached data" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Add a product to the order" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} not found!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Remove all products from the order" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Buy an order" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Please provide either order_uuid or order_hr_id - mutually exclusive!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Perform an action on a list of products in the order" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Remove/Add" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Action must be either \"add\" or \"remove\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Perform an action on a list of products in the wishlist" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Please provide `wishlist_uuid` value." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} not found!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Add a product to the order" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Remove a product from the order" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Buy an order" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -944,41 +944,41 @@ msgstr "" "Please send the attributes as the string formatted like " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Add or delete a feedback for the orderproduct" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Action must be either `add` or `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} not found!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Original address string provided by the user" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit must be between 1 and 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - works like a charm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Attributes" @@ -991,11 +991,11 @@ msgid "groups of attributes" msgstr "Groups of attributes" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Categories" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Brands" @@ -1004,7 +1004,7 @@ msgid "category image url" msgstr "Categories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Markup Percentage" @@ -1026,7 +1026,7 @@ msgstr "Tags for this category" msgid "products in this category" msgstr "Products in this category" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Vendors" @@ -1051,7 +1051,7 @@ msgid "represents feedback from a user." msgstr "Represents feedback from a user." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Notifications" @@ -1059,7 +1059,7 @@ msgstr "Notifications" msgid "download url for this order product if applicable" msgstr "Download url for this order product if applicable" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Feedback" @@ -1067,7 +1067,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "A list of order products in this order" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Billing address" @@ -1095,7 +1095,7 @@ msgstr "Are all of the products in the order digital" msgid "transactions for this order" msgstr "Transactions for this order" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Orders" @@ -1107,19 +1107,19 @@ msgstr "Image URL" msgid "product's images" msgstr "Product's images" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Category" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Attribute groups" @@ -1147,7 +1147,7 @@ msgstr "Number of feedbacks" msgid "only available for personal orders" msgstr "Products only available for personal orders" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Products" @@ -1159,15 +1159,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1175,11 +1175,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Wishlists" @@ -1187,7 +1187,7 @@ msgstr "Wishlists" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Product tags" @@ -1272,7 +1272,7 @@ msgstr "Products search results" msgid "posts search results" msgstr "Products search results" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1284,23 +1284,23 @@ msgstr "" "parent group, forming a hierarchical structure. This can be useful for " "categorizing and managing attributes more effectively in acomplex system." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Parent of this group" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Parent attribute group" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Attribute group's name" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Attribute group" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1318,40 +1318,48 @@ msgstr "" "also maintains additional metadata and constraints, making it suitable for " "use in systems that interact with third-party vendors." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stores credentials and endpoints required for vendor's API communication" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Authentication info" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Define the markup for products retrieved from this vendor" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Vendor markup percentage" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Name of this vendor" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Vendor name" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "response file" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "vendor's last processing response" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Vendor's integration file path" + +#: core/models.py:154 +msgid "integration path" +msgstr "Integration path" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1365,27 +1373,27 @@ msgstr "" "display name. It supports operations exported through mixins and provides " "metadata customization for administrative purposes." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tag name" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Product tag" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1395,15 +1403,15 @@ msgstr "" "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "category tag" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "category tags" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1425,51 +1433,51 @@ msgstr "" "hierarchy of categories, as well as assign attributes like images, tags, or " "priority." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Upload an image representing this category" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Category image" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Define a markup percentage for products in this category" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Parent of this category to form a hierarchical structure" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Parent category" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Category name" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Provide a name for this category" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Add a detailed description for this category" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Category description" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tags that help describe or group this category" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Priority" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1483,47 +1491,47 @@ msgstr "" "organization and representation of brand-related data within the " "application." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Name of this brand" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Brand name" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Upload a logo representing this brand" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Brand small image" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Upload a big logo representing this brand" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Brand big image" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Add a detailed description of the brand" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Brand description" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Optional categories that this brand is associated with" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Categories" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1539,68 +1547,68 @@ msgstr "" "management system to allow tracking and evaluation of products available " "from various vendors." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Selling price" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Associated product" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digital file" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1620,51 +1628,51 @@ msgstr "" "properties to improve performance. It is used to define and manipulate " "product data and its associated information within an application." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Category this product belongs to" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Optionally associate this product with a brand" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Indicates whether this product is digitally delivered" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Is product digital" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Provide a clear identifying name for the product" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Product name" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Product description" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Part number for this product" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Part number" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit for this product" @@ -1732,11 +1740,11 @@ msgstr "Name of this attribute" msgid "attribute's name" msgstr "Attribute's name" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "is filterable" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "designates whether this attribute can be used for filtering or not" @@ -1793,27 +1801,27 @@ msgstr "Image alt text" msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Product image" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Display priority" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Product images" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1829,39 +1837,39 @@ msgstr "" "applicable products. It integrates with the product catalog to determine the" " affected items in the campaign." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Included products" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promotion" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1873,23 +1881,23 @@ msgstr "" "operations such as adding and removing products, as well as supporting " "operations for adding and removing multiple products at once." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1905,19 +1913,19 @@ msgstr "" "files. It extends functionality from specific mixins and provides additional" " custom features." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documentary" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Unresolved" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1937,59 +1945,59 @@ msgstr "" "responses for further processing or inspection. The class also allows " "associating an address with a user, facilitating personalized data handling." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Address line for the customer" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Address line" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Street" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "District" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "City" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Postal code" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Country" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Full JSON response from geocoder for this address" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Stored JSON response from the geocoding service" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Address" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresses" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2005,71 +2013,71 @@ msgstr "" "any), and status of its usage. It includes functionality to validate and " "apply the promo code to an order while ensuring constraints are met." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Unique code used by a user to redeem a discount" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "End validity time" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Timestamp when the promocode was used, blank if not used yet" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Promo code" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2077,16 +2085,16 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2102,135 +2110,135 @@ msgstr "" "set, and shipping or billing details updated. Equally, functionality " "supports managing the products in the order lifecycle." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "The billing address used for this order" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Optional promo code applied to this order" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Applied promo code" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "The shipping address used for this order" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Shipping address" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Current status of the order in its lifecycle" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Order status" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" "view is used" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON representation of order attributes for this order" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "The user who placed the order" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "User" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "The timestamp when the order was finalized" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Buy time" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "A human-readable identifier for the order" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "human-readable ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Order" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "A user must have only one pending order at a time!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "You cannot add products to an order that is not a pending one" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "You cannot remove products from an order that is not a pending one" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "You can only buy physical products with shipping address specified!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Address does not exist" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "You can not purchase at this moment, please try again in a few minutes." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "You cannot buy an order without a user!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "A user without a balance cannot buy with balance!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2238,14 +2246,14 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Invalid payment method: {payment_method} from {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2267,108 +2275,108 @@ msgstr "" "download URL for digital products. The model integrates with the Order and " "Product models and stores a reference to them." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "The price paid by the customer for this product at purchase time" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "User notifications" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Parent order" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Product line status" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct must have an associated order!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Wrong action specified for feedback: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "you cannot feedback an order which is not received" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Name" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL of the integration" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Authentication credentials" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "You can only have one default CRM provider" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Order's CRM link" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Orders' CRM links" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2384,15 +2392,15 @@ msgstr "" " is publicly visible. It includes a method to generate a URL for downloading" " the asset when the associated order is in a completed status." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Download" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Downloads" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2406,62 +2414,54 @@ msgstr "" "product in the order, and a user-assigned rating. The class uses database " "fields to effectively model and manage feedback data." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "User-provided comments about their experience with the product" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Feedback comments" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "References the specific product in an order that this feedback is about" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Related order product" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "User-assigned rating for the product" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Product rating" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "you must provide a comment, rating, and order product uuid to add feedback." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Error during promocode creation: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Contact Us" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "About Us" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Payment Information" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Delivery" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2636,11 +2636,11 @@ msgstr "" "all rights\n" " reserved" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Both data and timeout are required" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Invalid timeout value, it must be between 0 and 216000 seconds" @@ -2672,7 +2672,7 @@ msgstr "You do not have permission to perform this action." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parameter must be configured!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2734,15 +2734,23 @@ msgstr "Handles global search queries." msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid is required" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "The order product does not have a product" + +#: core/views.py:359 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." @@ -2750,11 +2758,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon not found" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2762,7 +2770,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2772,7 +2780,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." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Returns current version of the eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2786,7 +2798,7 @@ msgstr "" "serializer classes based on the current action, customizable permissions, " "and rendering formats." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2800,7 +2812,7 @@ msgstr "" "provides a standardized way to process requests and responses for " "AttributeGroup data." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2816,7 +2828,7 @@ msgstr "" "specific fields or retrieving detailed versus simplified information " "depending on the request." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2830,7 +2842,7 @@ msgstr "" "mechanisms and uses appropriate serializers for different actions. Filtering" " capabilities are provided through the DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2844,7 +2856,7 @@ msgstr "" "The viewset also enforces permissions to ensure that only authorized users " "can access specific data." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2856,7 +2868,7 @@ msgstr "" "uses Django's ViewSet framework to simplify the implementation of API " "endpoints for Brand objects." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2874,7 +2886,7 @@ msgstr "" "product details, applying permissions, and accessing related feedback of a " "product." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2888,7 +2900,7 @@ msgstr "" "actions. The purpose of this class is to provide streamlined access to " "Vendor-related resources through the Django REST framework." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2904,7 +2916,7 @@ msgstr "" " accessible Feedback objects. It extends the base `EvibesViewSet` and makes " "use of Django's filtering system for querying data." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2922,7 +2934,7 @@ msgstr "" " uses multiple serializers based on the specific action being performed and " "enforces permissions accordingly while interacting with order data." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2936,11 +2948,11 @@ msgstr "" " requested action. Additionally, it provides a detailed action for handling " "feedback on OrderProduct instances" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Manages operations related to Product images in the application." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2948,15 +2960,15 @@ msgstr "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Represents a view set for managing promotions." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Handles operations related to Stock data in the system." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2974,7 +2986,7 @@ msgstr "" "that users can only manage their own wishlists unless explicit permissions " "are granted." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2988,12 +3000,12 @@ msgstr "" "different HTTP methods, serializer overrides, and permission handling based " "on the request context." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Geocoding error: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo index 76f76c8a692d00a97c94e2a9f0ec5150ff20e09b..5d569f1927857adca88391b7b3eff1d10c68fb2f 100644 GIT binary patch delta 13084 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 delta 12824 zcmZwO33yG{-pBEEB9l2nVvfWRi7AEzK?x#+nrj||RMkAsj#5R7QuFL;Y0X2FQbSvF zx$RYIY^ya^iyCez%Dvy;Su5}3xzD?w`}bM@wf5P2?KSLk%KOe*8nACsfcK|R|M`Za ziJvh=a9F4@d9xUEvZQK_DNxCnd{_{>d5o!m!Q`_l8xw>JF&nPL0=OOv;z10+ACb$M ztLTq6aRS~(KIb)ks~8hP#Rv?;sW=apV<1+Jw>L<{Bs!3c>cEr)W1?^tmd34E2+!lE zJj_E(BwttEUiT_eWu7?WXiVV#CY?e)8kS--ZpAb_hY^@q!v4?Yywj+T{E6PB z6rNHD#03qRdt8n=a2sl5_G1e!cp5eIB~y*LjOB41^*I|GQx11EF{Tqkf9+LcF4CUV z+?e6i7iO4B8|ly84MOpNibe%s?&D`=}|cJjkA(ikjMH zsHts_2RW~&mqHeLR(c4-NkiFT#>8R=jK;}W3D;vq`~fuuIfvU-AC4u+Yok8b1IytI z*S_1;|AMSvlYNBUB`H{x+?$qJKwV%tCg4%bhtE-qFm$9HsWOcZPlPy8*m!wc99D~+Tp#!BY4LwJVB@ zVKlHfhG9k2`6;NW?11V>U-Wex)!``^qW!;&LVhYXxf2fi8jShgc>^_PkFgN?(F=93 zC`Mu>EQ77EGLA=0*;ZG71$E<`BK2;s{TNAB=jviMWs+v9OtD_k3tQsjN?&5 zvlX=s_n~g^5Ow3ANp`3Upr$4YHP>+%g*9D!7t|tr9knJFVR2lINq895L2uw>`-I`B z7fuXnu{C$~ZBcXkhRX+|E;t!uaVA#7UAPASK%GDTZ9C^HFrIt|YP;S-jqo2>Q~N(= zitTAH)Eq6q7+isRqNAve-9p_cR*#k0t}%#@tU z!p5Z-p#7h9nqBp|F@=T*)Dxy-APz)bXas6XreO^3M|Jons{IdC2R+m6;!4Cg@^sV` z&c{?-hqdt`X662-^1F5}YoVT~F;>McSRUtL75oab;3HHAo}$)3iTC)5#Y(8WDMnx? z)XQciJVuhY#iBS8E8=`ChDTic4J=C@G}CU|DyR{tjvD&L z7>wyIAAk+Xr@Q)7&Wke{f4y+7QsIveP}}h_s>iuz*`bTV0^|vp6PvmE&ZsFGgcWck zYL&0W4tN|jk|o}^i?t)_ytgp`Gu~(Xb5Yn$g>HBZbK@n{jef^Se1he$&}@5tL(Dm{)RRv{b!aJu;A+(8GEfipGwS+}QM(|>JIAixB-91lV0P?*y6^zh+`fled>^A0 z-H*=esKs>$eT(k{yJiwmbKe_PzYLS{3~Gc5&gE^3-dYrN!&#_pv;;LYTTpZODe8v% zF)toLjm$;V$o=Z-AEO>1`#k&P1yJp=sOwipwI{pwmdN$JrUwPRI{UhYDVU#p0cw$L zMt$%iX2YAPFOvtT3kT1)Lz@q^M#^FyOh%pG7PDd+hGAb+$KJwh+W)gDRHR}lM&e1- z_PT?bqwodxg3VF8APsxrTUZ8fpr$I%LOWs=P#vg-6)+X6;wY?-TTs`1hz+^FDYwWj znqe45J{HyEIj9>hMa|jg&Y!Rpxo5GhFO3?(#u$&iP#s!~8iAeI3BSbFSagY93xm;{ zsuL)bL$lP5KzYnZ+6*<P0gcYv5vx#WSw`1y&}H zUC#LHLY7F5izy%#=pXiHbS>1-c1Jz=JE)ZnCk7xe;Zjp5i6H6mlMJg&p9@f=RZ z)gRfZh+bnytQjUz|1Ro$?+FT;`zIKU(QEDMZ;Be?5vWDA9ZTU&)LiHM*nUS;N6mFx ztb-FU0r#V>`)@3XQJ?TL4^vQ!axw;J|IebJeLN4f$W~zq+=GSjC)ECbibXMKogKy9r3opU~_#vj^UW~=S_4WZOVj1$b7_I&P76lFIC+Lr#p@wE3hT`w2j=VrU zNudpPr0QU8^4F0kF>5dzZooj?iR#Ec%#LSK+xrUYyuUDt`%#c?`n?QF!X_yv~7uTfL^7uLo2&2|xvKyNuJc2g*WH&8>B zXN#TlnyBqE2%~W`YEgZU+NK@0+Nqj>^~krP>K|egjNWG7d_z$8S%UHPe96Pr;_`Z?-zhf(KWMNP>I%!2+q?bHV2 za`K#*9XIS`{552|s3?Lbkj|N3QFF9pmz}dU*n(&mwL0)K|J%2J*Bj4wx5JBNj)b`4^pRZ!9fo1VHp614X;%q$rg&o?CU)dY1 z#jMl^ALOOP`JspS&LF>p>e#cxObaF)v5WEs<|n^{G3X6AYF{K3Fb5S4P*2{<)ptP+ z<+w4Y$eVm^|IVlANjp_@|7l%~RXA@O2I6(h(Eh*eDpq}C zzjQvvJe;r>HJ9JuJT80-gUKiSizy?YiuZBpDV`K(p5}rK{n0aAhkWcgzVUGOdA=L4 z)kS^{;gU;y2K|0ytNStkD}Lf;RJ8krUSYng{Ji2uPp`51$sx$3 zP(K^<;QimYC}z3MmgBq?clcWn@^1GSX7qo+x}pBTLpn#k`4Q_4NBqV2g!X@hr*?mi zM?Lv&)T%v!THW7bRlI;2x{znq{HXQ_Ove};$%SWOIC4QbEE53uR@j7rp-Y88sCzQ16A1V2|&`Q64LipFmB; za|}U$_MmPUhWcC-hGG@eh^4r^IqLd7FfUH@QqU94!(6xl^`)`Lop2g8$2Tzo?>j@X zd3@iNaTrT|Dry9WVl~`|74aGt!Z7|uS{#{Cp>{#3%@w;IG>;{7{H6Z7FNM6I0)5&$S^wb}IUyZ~r>yp?1Y5SP+k) z9_$MCz$Z8cI~VYn!FUd}CQ`ix?cBA%*QgkXdZ8RbJ<0c|8(l_?&_mRdmndW}&=R#K z+M_zyA1mP=Y>2l}i!#2jZEucE$d_Rb^#1A!f1-Ns$G^AK#UfZ0yW%9AkJ=ptirTr3 zK<$E-s3-4<>gZ%Fjtj9K?m;ci=cqMNB*KnpD`cd-W-0|e(Kgifxa{&A{EX4u)j&Y7TFH)DtWl_uOLTdCY(w4&wOF^I*4SRmt^I$9g6853>H?QgL;BF= z!BO^A8i{(5v_vh=?x@d=K&}4qs9m!awaBiao;azvtsj9}OY6}eFJl<@H`gfW#!pdm zA6mi=Z3)y|CZI0V8?`-`yY@|3lKcQh;x*Kh1(dXNo)a~KF{n3TPt=2r!#X$zy_&OA z6y$YO2cDo_mDx(!7f3nO2U??gJ{L8_i%=b3jaoB%P*d|a>c?k7w8!_CP6M$f`3}^V z(mm{eQKi}cnv=1mJ-+`Scn3A4n^8CT6g9^O(6_Bn9le6uUXL&mbH>>E3aF{6hkD}n zE+33Kf2wl@`mP`2weR=?RA^{^z|wdhHS`5z?S-45I@%3&gEvtxrirL8p&6)-edaug zy5Y~L&pk$c$@!JBBNmDJe048{S12T7G)_X@cpYk=Ucy)`UDj@+me`kk5bFFNQ0-aD z*^w%b+Ll#Oi?R_m$FbN7PoSnIqP*P|-u4uEXAKT(RwmaJ}{ zycKGnPe#q{T+~SH!+!W3YL4q9+Fj8S^=j^m+Kz)!b37fjdk&)B11B*JgKF6G`=D3b zZ6F0X0yTHzQLFqD=YG^`J%hegje4g)MqN0(rk#?OxPbg!9E?%5+*G0V|4DomgI}>z z)#erUzvkv`Dzuunp;qmA)P=Lxwiif2tqm_~k*-0#ppIb`{0&nuqK=)ibX5IE7>Vbx z89qV1;2I^_5$KTQwO@nXs3=TBKU7Dip`LIH=D=@U`z5SP{unh9iFG~Zb!>q;Zx^bA zhfr(cCaNQK>e(kAidx*OU4Gh2K^O9?Z?|DV)QCi(UKq`=EcQcva1rW)$1w??qvpPL zvi(VxjGFUSs1fRfd2u}I$Lt)`2y8}O&wGG^hWZ|A-aHphhaRiQPphsQ1DkjKNjDdiLLO3cA5V)EbC- z)nhzZR)265^W!fN2+gaG52@d1i-vcP?|2vWPIyExqh_bAHve=Uqizu8o5Va~GI?{% z?&ZSaBqNDQL`mW`8nWR^;(Ov9;&zpXsHe(^8JN0{sSE$q5PY1ip z9K;vIJ<3Ih4n!oO;~heaR9|qsWKBLk+klwj+O_^n4wCv*wse(8@C`n2k*G+$jugB` zeOrR>5#KT2VwSnwk8{4Dtle?|Te|j5_&0eUVlHLvio-+*c@4e)KO@c)|D;04Na8oj zxm>QgR<1l&2}dk9)9x5geLdWW+UGj@QI00&5(CNOIXCn8lR6#WU<~!%k0|V>q7+F8 zk(DSwT^t5u2`q%45}C&;3cTX~?^xnW`aiuIMEz{?Kd=&hg-0exhE z=5dxnW1=llh;yoF|IgwCzK2XG<>gq4_>B1fj(4f-NZXIZe~3};r1g~fU1ElikHF01 zX9^R^^(EB}GhD+|${$enZlUmkFa$3?-`{v%#ZapDsh*=Q@r$oy|Hw^!FJb~QlNe6u zD8~cbpj?1*10s;}cesGi@h^*spgs@h*5~(!uj&*Pwr~9a2lxTw zJM=qnAMrU+oBA}=J6}gO@@(Fli z9o2|DuI?wN>f7lLcN9gwLVQPEu91t-v65&-oSh41As9Wah0;#)0InL#Nv}Gld$gdKeU;6w|$_uHRK$M~UEAcZ?fou52KN}6N z68|CY(oh+v5IZPm9)D3tAtn*;5l>y)5S&NkC8oQ&`n2naC*C636C(&6J%}jI3$W*U z%|Z(2d`B_As>)!;HlK)Elo48ASLFmX&+hxq` z<4Mjx<7?r2pYj#TUlR9q|MIS3nzOg_C?~3Y9R|27J*Rw@$UNpyzCau%Vu`0TyiI(V zd4h8QZT^&NVRoV*QJiafzoVcd(PBPvX41^HU!YG|rA>>{>O(TVtpI6xdD`Vt=#nMVTW72sl?mpbqsb=wIY zxv9TR`5Vg5iDJZM*GAFzZ;Em$b^3=7-}r_}j#ESem7TGqyFn2QCqGT-=tc}Ds#33i zLiyjL0~Irgsjk7F8$G6+lXJ&X-cPv%ZY6Xa_fn|gl4wqP!Ps=Hv zb8XXIeISN&(J(?sBiaLO(e$TWn({E>6Zg4b&YMBGF(zXMaYXm;%1LjN^un&#n^-~U z{~_T6{Ehn6sH4BdbaeKhz8vK=97ilBR=c)bxWbi14DlxIFCR_x{CT;Nj)J)Vr4v#p z|Kjp2w9Tgcj7Ybqn+KF@QvTlMwaJ4x?+!ksE)K_Ib)qz79bXXxDHl`{lRhdfqiLl+ z{#n!e^%;>qWVA`1J91J~#<_&Mc|y}h_fH=%EHZV#>jQ`MPaD=};DC&S4ckO#Bn`M* zD5K8w4}vo8&CVK@QDW_cz>F_8hUN@vFksk_^xkP1r*=;Y%jZ7Uv(Led0g=7ZBL}7R w9+=VU+mmH8Ql6bEwy\n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Imagen" msgid "images" msgstr "Imágenes" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stock" @@ -118,11 +118,11 @@ msgstr "Stock" msgid "stocks" msgstr "Acciones" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Pedir un producto" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Pedir productos" @@ -130,7 +130,7 @@ msgstr "Pedir productos" msgid "children" msgstr "Niños" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Configurar" @@ -182,7 +182,7 @@ msgstr "Momento" msgid "successful" msgstr "Éxito" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "E/S de caché" @@ -206,7 +206,7 @@ msgstr "Obtener los parámetros exponibles de la aplicación" msgid "send a message to the support team" msgstr "Enviar un mensaje al equipo de asistencia" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Solicitar una URL CORSed. Solo se permite https." @@ -448,7 +448,7 @@ msgstr "" "finaliza utilizando el saldo del usuario; Si se utiliza `force_payment`, se " "inicia una transacción." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "comprar un pedido sin crear una cuenta" @@ -746,233 +746,233 @@ msgstr "suprimir una relación pedido-producto" msgid "add or remove feedback on an order–product relation" msgstr "añadir o eliminar comentarios en una relación pedido-producto" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Buscar en" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Nombre" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Categorías" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Categorías Babosas" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Etiquetas" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Precio mínimo" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Precio máximo" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Está activo" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Marca" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Atributos" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Cantidad" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Babosa" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Es Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Incluir subcategorías" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Incluir productos personales solicitados" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Debe haber un category_uuid para usar la bandera include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Búsqueda (ID, nombre del producto o número de pieza)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Comprado después (inclusive)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Correo electrónico del usuario" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID de usuario" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Estado" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Identificación legible" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Padres" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Toda la categoría (tenga o no al menos 1 producto)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Nivel" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID del producto" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Clave que hay que buscar o introducir en la caché" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Datos a almacenar en caché" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Tiempo de espera en segundos para poner los datos en la caché" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Datos en caché" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Datos JSON camelizados de la URL solicitada" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Sólo se permiten URL que empiecen por http(s)://." -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Añadir un producto al pedido" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} ¡no encontrado!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Eliminar todos los productos del pedido" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Comprar un pedido" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Indique order_uuid o order_hr_id, ¡se excluyen mutuamente!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Realizar una acción en una lista de productos del pedido" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Quitar/Agregar" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Realizar una acción en una lista de productos de la lista de deseos" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Por favor, proporcione el valor `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de deseos {wishlist_uuid} ¡no encontrada!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Añadir un producto al pedido" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Eliminar un producto del pedido" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Comprar un pedido" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -980,41 +980,41 @@ msgstr "" "Por favor, envíe los atributos como una cadena formateada como " "attr1=valor1,attr2=valor2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Añadir o eliminar un comentario para el pedido-producto" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "La acción debe ser \"añadir\" o \"eliminar\"." -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "No se ha encontrado el producto {order_product_uuid}." -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Cadena de dirección original proporcionada por el usuario" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "El límite debe estar entre 1 y 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona a las mil maravillas" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Atributos" @@ -1027,11 +1027,11 @@ msgid "groups of attributes" msgstr "Grupos de atributos" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Categorías" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Marcas" @@ -1040,7 +1040,7 @@ msgid "category image url" msgstr "Categorías" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Porcentaje de recargo" @@ -1064,7 +1064,7 @@ msgstr "Etiquetas para esta categoría" msgid "products in this category" msgstr "Productos de esta categoría" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Vendedores" @@ -1091,7 +1091,7 @@ msgid "represents feedback from a user." msgstr "Representa la opinión de un usuario." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Notificaciones" @@ -1099,7 +1099,7 @@ msgstr "Notificaciones" msgid "download url for this order product if applicable" msgstr "Descargar url para este producto de pedido si procede" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Comentarios" @@ -1107,7 +1107,7 @@ msgstr "Comentarios" msgid "a list of order products in this order" msgstr "Una lista de los productos del pedido" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Dirección de facturación" @@ -1135,7 +1135,7 @@ msgstr "¿Están todos los productos en el pedido digital" msgid "transactions for this order" msgstr "Transacciones para este pedido" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Pedidos" @@ -1147,19 +1147,19 @@ msgstr "URL de la imagen" msgid "product's images" msgstr "Imágenes del producto" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Categoría" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Comentarios" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Marca" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Grupos de atributos" @@ -1187,7 +1187,7 @@ msgstr "Número de reacciones" msgid "only available for personal orders" msgstr "Productos sólo disponibles para pedidos personales" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Productos" @@ -1199,15 +1199,15 @@ msgstr "Códigos promocionales" msgid "products on sale" msgstr "Productos a la venta" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promociones" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Vendedor" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1215,11 +1215,11 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Productos deseados" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Listas de deseos" @@ -1227,7 +1227,7 @@ msgstr "Listas de deseos" msgid "tagged products" msgstr "Productos con etiqueta" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Etiquetas del producto" @@ -1313,7 +1313,7 @@ msgstr "Resultados de la búsqueda de productos" msgid "posts search results" msgstr "Resultados de la búsqueda de productos" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1326,23 +1326,23 @@ msgstr "" "Esto puede ser útil para categorizar y gestionar los atributos de manera más" " eficaz en un sistema complejo." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Padre de este grupo" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Grupo de atributos padre" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Nombre del grupo de atributos" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Grupo de atributos" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1361,43 +1361,51 @@ msgstr "" " restricciones adicionales, lo que lo hace adecuado para su uso en sistemas " "que interactúan con proveedores externos." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Almacena las credenciales y los puntos finales necesarios para la " "comunicación API del proveedor" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Información de autenticación" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definir el margen de beneficio para los productos recuperados de este " "proveedor" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Porcentaje de margen del vendedor" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Nombre de este vendedor" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Nombre del vendedor" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "archivo de respuesta" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "última respuesta de procesamiento del proveedor" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Ruta del archivo de integración del proveedor" + +#: core/models.py:154 +msgid "integration path" +msgstr "Vía de integración" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1412,27 +1420,27 @@ msgstr "" "operaciones exportadas a través de mixins y proporciona personalización de " "metadatos con fines administrativos." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Identificador interno de la etiqueta del producto" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Nombre de la etiqueta" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Nombre fácil de usar para la etiqueta del producto" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Etiqueta del producto" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1443,15 +1451,15 @@ msgstr "" "clasificar productos. Incluye atributos para un identificador de etiqueta " "interno y un nombre de visualización fácil de usar." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "etiqueta de categoría" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "etiquetas de categoría" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1474,51 +1482,51 @@ msgstr "" "descripción y la jerarquía de las categorías, así como asignar atributos " "como imágenes, etiquetas o prioridad." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Cargar una imagen que represente esta categoría" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Categoría imagen" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Definir un porcentaje de recargo para los productos de esta categoría" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Padre de esta categoría para formar una estructura jerárquica" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Categoría de padres" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Nombre de la categoría" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Indique un nombre para esta categoría" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Añadir una descripción detallada para esta categoría" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Descripción de la categoría" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "etiquetas que ayudan a describir o agrupar esta categoría" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioridad" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1532,47 +1540,47 @@ msgstr "" "Permite organizar y representar los datos relacionados con la marca dentro " "de la aplicación." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Nombre de esta marca" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Marca" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Cargar un logotipo que represente a esta marca" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Marca pequeña imagen" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Sube un logotipo grande que represente a esta marca" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Gran imagen de marca" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Añadir una descripción detallada de la marca" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Descripción de la marca" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Categorías opcionales a las que se asocia esta marca" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Categorías" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1589,68 +1597,68 @@ msgstr "" "seguimiento y la evaluación de los productos disponibles de varios " "vendedores." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Proveedor asociado" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Precio de venta" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Producto asociado" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Cantidad en stock" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU del vendedor" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Archivo digital" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Entradas en existencias" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1672,51 +1680,51 @@ msgstr "" "para definir y manipular datos de productos y su información asociada dentro" " de una aplicación." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Categoría a la que pertenece este producto" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Si lo desea, puede asociar este producto a una marca" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Indica si este producto se entrega digitalmente" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "¿Es digital el producto?" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Proporcionar un nombre que identifique claramente el producto" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Nombre del producto" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Descripción del producto" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Número de pieza de este producto" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Número de pieza" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Unidad de Mantenimiento de Existencias para este producto" @@ -1784,11 +1792,11 @@ msgstr "Nombre de este atributo" msgid "attribute's name" msgstr "Nombre del atributo" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "es filtrable" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Qué atributos y valores se pueden utilizar para filtrar esta categoría." @@ -1847,27 +1855,27 @@ msgstr "Texto alternativo de la imagen" msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Imagen del producto" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Prioridad de visualización" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Imágenes de productos" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1883,39 +1891,39 @@ msgstr "" "promoción y vincularla a los productos aplicables. Se integra con el " "catálogo de productos para determinar los artículos afectados en la campaña." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Nombre de la promoción" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Descripción de la promoción" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Productos incluidos" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promoción" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1928,23 +1936,23 @@ msgstr "" "productos, así como soportar operaciones para añadir y eliminar múltiples " "productos a la vez." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Lista de deseos" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1960,19 +1968,19 @@ msgstr "" "de almacenamiento de los archivos documentales. Amplía la funcionalidad de " "mixins específicos y proporciona características personalizadas adicionales." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documental" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Sin resolver" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1994,59 +2002,59 @@ msgstr "" " clase también permite asociar una dirección a un usuario, facilitando el " "manejo personalizado de los datos." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Dirección del cliente" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Dirección" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Calle" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Distrito" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Ciudad" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Región" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Promo code" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "País" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocalización Punto(Longitud, Latitud)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Respuesta JSON completa del geocodificador para esta dirección" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Respuesta JSON almacenada del servicio de geocodificación" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Dirección" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Direcciones" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2063,72 +2071,72 @@ msgstr "" "para validar y aplicar el código promocional a un pedido garantizando el " "cumplimiento de las restricciones." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Código único utilizado por un usuario para canjear un descuento" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Se aplica un descuento fijo si no se utiliza el porcentaje" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Porcentaje de descuento aplicado si no se utiliza el importe fijo" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Hora de fin de validez" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Hora de inicio de validez" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Fecha en la que se utilizó el promocode, en blanco si aún no se ha utilizado" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Usuario asignado" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Promo code" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2136,16 +2144,16 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "¡Tipo de descuento no válido para el código promocional {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2162,137 +2170,137 @@ msgstr "" " envío o facturación. Del mismo modo, la funcionalidad permite gestionar los" " productos en el ciclo de vida del pedido." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "La dirección de facturación utilizada para este pedido" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "La dirección de envío utilizada para este pedido" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Dirección de envío" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Estado actual del pedido en su ciclo de vida" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Estado del pedido" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Estructura JSON de las notificaciones para mostrar a los usuarios, en la " "interfaz de administración se utiliza la vista de tabla." -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Representación JSON de los atributos de la orden para esta orden" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "El usuario que realizó el pedido" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Usuario" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Fecha de finalización de la orden" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Comprar tiempo" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Un identificador legible por el ser humano para la orden" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID legible por humanos" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Pida" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Un usuario sólo puede tener una orden pendiente a la vez." -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "No puede añadir productos a un pedido que no esté pendiente" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "No puede añadir más productos de los disponibles en stock" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "No puede eliminar productos de un pedido que no esté pendiente" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ¡no existe con la consulta <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promocode no existe" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Sólo puede comprar productos físicos con la dirección de envío especificada." -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "La dirección no existe" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "No puede comprar en este momento, por favor inténtelo de nuevo en unos " "minutos." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "No se puede comprar un pedido sin un usuario." -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "¡Un usuario sin saldo no puede comprar con saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2300,14 +2308,14 @@ msgstr "" "no puede comprar sin registrarse, facilite la siguiente información: nombre " "del cliente, correo electrónico del cliente, número de teléfono del cliente" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Forma de pago no válida: ¡{payment_method} de {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2330,110 +2338,110 @@ msgstr "" "productos digitales. El modelo se integra con los modelos Pedido y Producto " "y almacena una referencia a ellos." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" "El precio pagado por el cliente por este producto en el momento de la compra" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Comentarios internos" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Orden de los padres" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Cantidad de productos" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Estado de la línea de productos" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "El pedido-producto debe tener un pedido asociado." -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acción incorrecta especificada para la retroalimentación: ¡{action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "no se puede comentar un pedido no recibido" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Nombre" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL de la integración" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Credenciales de autenticación" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Sólo puede tener un proveedor de CRM por defecto" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Enlace CRM del pedido" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Enlaces CRM de los pedidos" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2450,15 +2458,15 @@ msgstr "" " para descargar el activo cuando el pedido asociado está en estado " "completado." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Descargar" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Descargas" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2474,64 +2482,56 @@ msgstr "" "clase utiliza campos de base de datos para modelar y gestionar eficazmente " "los datos de los comentarios." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Comentarios de los usuarios sobre su experiencia con el producto" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Comentarios" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Hace referencia al producto específico de un pedido sobre el que trata esta " "opinión" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Producto relacionado con el pedido" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Valoración del producto asignada por el usuario" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Valoración del producto" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "debe proporcionar un comentario, una valoración y el uuid del producto " "solicitado para añadir comentarios." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Error durante la creación del promocode: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Inicio" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Contacte con nosotros" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Quiénes somos" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Información de pago" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Entrega" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2706,11 +2706,11 @@ msgstr "" "todos los derechos\n" " reservados" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Tanto los datos como el tiempo de espera son necesarios" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Valor de tiempo de espera no válido, debe estar entre 0 y 216000 segundos." @@ -2743,7 +2743,7 @@ msgstr "No tiene permiso para realizar esta acción." msgid "NOMINATIM_URL must be configured." msgstr "El parámetro NOMINATIM_URL debe estar configurado." -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2808,15 +2808,23 @@ msgstr "Gestiona las consultas de búsqueda global." msgid "Handles the logic of buying as a business without registration." msgstr "Maneja la lógica de la compra como empresa sin registro." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid es obligatorio" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Sólo puede descargar el activo digital una vez" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "el pedido debe pagarse antes de descargar el activo digital" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "El producto del pedido no tiene un producto" + +#: core/views.py:359 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." @@ -2824,11 +2832,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon no encontrado" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2836,7 +2844,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2847,7 +2855,11 @@ msgstr "" "de la interfaz de administración de Django. Utiliza la función `redirect` de" " Django para gestionar la redirección HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Devuelve la versión actual del eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2861,7 +2873,7 @@ msgstr "" "Incluye soporte para clases serializadoras dinámicas basadas en la acción " "actual, permisos personalizables y formatos de representación." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2875,7 +2887,7 @@ msgstr "" " de la aplicación y proporciona una forma estandarizada de procesar las " "solicitudes y respuestas de los datos de AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2892,7 +2904,7 @@ msgstr "" "específicos o la recuperación de información detallada o simplificada en " "función de la solicitud." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2907,7 +2919,7 @@ msgstr "" "acciones. Las capacidades de filtrado se proporcionan a través de " "DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2921,7 +2933,7 @@ msgstr "" "de categorías. El conjunto de vistas también aplica permisos para garantizar" " que sólo los usuarios autorizados puedan acceder a datos específicos." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2933,7 +2945,7 @@ msgstr "" " Brand. Utiliza el marco ViewSet de Django para simplificar la " "implementación de puntos finales de API para objetos Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2952,7 +2964,7 @@ msgstr "" "producto, aplicar permisos y acceder a comentarios relacionados de un " "producto." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2967,7 +2979,7 @@ msgstr "" "proporcionar un acceso simplificado a los recursos relacionados con el " "vendedor a través del marco REST de Django." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2984,7 +2996,7 @@ msgstr "" "objetos Feedback accesibles. Extiende la base `EvibesViewSet` y hace uso del" " sistema de filtrado de Django para la consulta de datos." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3003,7 +3015,7 @@ msgstr "" "acción específica que se esté realizando y aplica los permisos " "correspondientes al interactuar con los datos del pedido." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3018,13 +3030,13 @@ msgstr "" "Además, proporciona una acción detallada para gestionar los comentarios " "sobre las instancias de OrderProduct." -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestiona las operaciones relacionadas con las imágenes de productos en la " "aplicación." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3032,16 +3044,16 @@ msgstr "" "Gestiona la recuperación y el manejo de instancias de PromoCode a través de " "varias acciones de la API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Representa un conjunto de vistas para gestionar promociones." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestiona las operaciones relacionadas con los datos de Stock en el sistema." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3060,7 +3072,7 @@ msgstr "" "integrados para garantizar que los usuarios sólo puedan gestionar sus " "propias listas de deseos a menos que se concedan permisos explícitos." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3074,12 +3086,12 @@ msgstr "" "comportamientos especializados para diferentes métodos HTTP, anulaciones del" " serializador y gestión de permisos basada en el contexto de la solicitud." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Error de geocodificación: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/fa_IR/LC_MESSAGES/django.po b/core/locale/fa_IR/LC_MESSAGES/django.po index 5e5fbc61..9166e031 100644 --- a/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -108,7 +108,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "" @@ -116,11 +116,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "" @@ -128,7 +128,7 @@ msgstr "" msgid "children" msgstr "" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "" @@ -180,7 +180,7 @@ msgstr "" msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" @@ -202,7 +202,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" @@ -414,7 +414,7 @@ msgid "" "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" @@ -682,271 +682,271 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "" @@ -959,11 +959,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "" @@ -972,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "" @@ -992,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "" @@ -1017,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "" @@ -1025,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "" @@ -1033,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "" @@ -1059,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "" @@ -1071,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "" @@ -1111,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "" @@ -1123,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1139,11 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "" @@ -1151,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "" @@ -1236,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1244,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1271,39 +1271,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "" + +#: core/models.py:154 +msgid "integration path" +msgstr "" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1312,42 +1320,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1360,51 +1368,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1412,47 +1420,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1462,67 +1470,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 core/models.py:1644 msgid "associated product" msgstr "" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1534,51 +1542,51 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "" @@ -1640,11 +1648,11 @@ msgstr "" msgid "attribute's name" msgstr "" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" @@ -1693,27 +1701,27 @@ msgstr "" msgid "upload the image file for this product" msgstr "" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1723,39 +1731,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1763,23 +1771,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1789,19 +1797,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1813,59 +1821,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1875,86 +1883,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -1964,144 +1972,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2114,108 +2122,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2225,15 +2233,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2242,59 +2250,51 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "" -#: core/models.py:1851 +#: core/models.py:1848 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2455,11 +2455,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2491,7 +2491,7 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2542,15 +2542,23 @@ msgstr "" msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:312 -msgid "you can only download the digital asset once" +#: core/views.py:309 +msgid "order_product_uuid is required" msgstr "" #: core/views.py:315 +msgid "you can only download the digital asset once" +msgstr "" + +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "" + +#: core/views.py:359 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 " @@ -2558,11 +2566,11 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "" -#: core/views.py:370 +#: core/views.py:376 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2570,14 +2578,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:382 +#: core/views.py:388 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 "" -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2586,7 +2598,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2594,7 +2606,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2604,7 +2616,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2613,7 +2625,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2622,7 +2634,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2630,7 +2642,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2641,7 +2653,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2650,7 +2662,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2660,7 +2672,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2671,7 +2683,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2680,25 +2692,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2709,7 +2721,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2718,12 +2730,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo index fdba5980da597df292c1ab8837abae17a4f68c6e..dc81bdb97981ad6002c7dbb8fb5df5fc3bdfad92 100644 GIT binary patch delta 13091 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 delta 12831 zcmZwO2YgRw-^cOmkA#@9Vv`7o5h5ZaW)LCNC`IiVqlmrB->9Oklv>r)xK)kT4pLg9 zwduIqDoX95s#eu*>-l{D*Olkx^}L?*x_{o+I_F&H8s|jx-n+@~=6XNx`2yJ%8jcoO zj46qu3K&x`t1(}fQ>igUql_tp#juCRn5vkAd}?)Lvg2aRiOaDleuBktKlFAULNFD>aWfXj)3}|7 zxsP$=*TvfFUO|e?6K5oqG2GuIlPE+*8iwI!?1iVWG{)67W)e4k6ywZyj(qF z+F)0Fh#PPVuBvZLF4}cyU=05=z2ofztwfDLt%k zl!QMnYRcT>Qp}B8P$RPk+i<}jQA1xY$(RdR1=mrYr@1i^n9;(RE)4yzFBx-&`uNty zjHbK$(Z9@;C5#gCHY-lm`^;_ z)tE@ik9SA%&+t$3m3tb~nSAM9#w2mQ@x6^%NPd4`+rdu#j2T9G)&X>q@=>p`elTJ% z<4@0|9vD1P~kV8r^lkGMVNqj@l{lPf1HRDusl9Q?TV5U z7!53og|Ql{eIjZqJE1x<2z?z#b$A8_YX5&oq6h^WT!VwY3S)k9UPH~vqISVOjF!(NFuo83{FLh3av4)D4HZ{6y3uoP&DO z1*i+GL=E{t)SCDK^`vJp7hXkm?4GMHImuqPJnDYc(5n;UNocNJ9f*SYc?7)<^E>N;0ZyW=)$ZQMuQ=oxBia!t0^3qf5cax&wu8`q^kC%%k2u><-> z!Z{4pZW?Ot7h@pqMoq=HSPU;a|3=+7h~d?PgrTk*hY{EiwboL+B(xYla0Od1mi#%4 z!=Nd)BW;|$Q8ymt@-t8!Sd8kxr_O_@4qQM@)g4qv3QV2K9uJ~A==Gm&pD+mZ z!l{5-Y^_~+2h`jSaQWe=3r@$1I0tKC27ZipQ0*7KVds1q)*!zPwOwzZM)(fa(f+S6 z!}hcbWmkPZOr)YT>Isw4ABUnYGzK*#v#Hd$`Zk|fj6&sGVrlGx z8u|&S>u$nu{L1+|dNsra-mybn1B1zTz*0CCtKmW{gNI!GHLOfN`y9J%qfsLeiyHdo zm;;ktJ_VbSpY6)Ocb=KU`0Ispg@SDOCu%!BLiIRrsvWuzEJ{8G^I$7i-W4@P!>}rj zMXmDH*a?rKMl$qWyI4D;+P#5(nEo!~pO?f=3UtFGm=DjQZgdla@d-v?@wv8rQ_M}i z1D3=-s3)I->QEX6;!4zc>8J<0h`RnG)Go;Goo82XJnDk&F&FkmT{s0bw{N2s-x}1S zJLkNLT3ol#xA@+(YbFjg_x(}jA7TQYK#fqb`Mhn>TbG1xn2Op)AE1V26KW2(qi(nd z3*sTv$eclq+;6V@5$XYQEwE2s6jfglb^TaWeS)ih8M(gK^d_NK=O9-x1B;Mfgj!@9 zQ74|koOm7eG5Hg9;T#L?&=x|ik;<4K6Hx6tU;y^Q!Z--kv8k9-`+qKpY80elFn*2N zUbj$l6tu`*ur+EI^uoS46)WL2)KukPY)7mrsspvKDkfn~9EXi@6Y9G6u_^aA5%1eY zGYSinpNQ)5Jk$--P;>UV^E{R(?^$BY!%-vH9BW`-REL(JMqmea!7s5LmioZ1h2iK; zQUekZXwvKmRKY@ITcPH<4;I7Ws400HqcFpH12qyQKC~vHUNpn8HZH-6c*52Hi`B_j zT*~F2*`|$dzYVZeK7pup#BIyZj!EC-1+)+7#=N zpXKt0R(S1@W&e-;F}f~lXnUfb{7ux*FTg;|z^-@%wTQ~Ew7a4PYS%PFo!1IOu`B9* zFa;xVCN{zhSN_!N5}uFjT;;%mG$@F=VK{0V#-bKgL(~hT9R^_^)QC*LD!2}h;VGPs zD_7a62>aNMSSyUD{4G>_?{N~E`zIKNVXN)xZ;2Y>F{nkg70csw)LiFTW4{rxsJZTd z4RA8X;2zX<|H5(@vX&q7FcGyVr=y?te<}&>;{~WiwgN+O7nZ>DsQv#GOJVkPb|}kZ z0QvS9i#<>mejkhCN0@|PU`6!*#6CbZtVF&8hH3v#C7~f*i`noq)X?n40(cYEk$+K7 zQv6dpQVp;^`F_Zgn2#|hev1CM1J#k;mO?ujrv`Sv&oyP@Xx zEQVmt4R+r~U=H%bQHyW_mc`kqwX+@ra35B|W2mWoj195IM!N{dpf`eoog^yZHPle$ z-(=^!4r;p$!!X>4T2w!wwrQu$cBog9 zthm)yv_sADWbEVNtA$0#n{D>*>qRj?*=5`9lWs;m=>b%`Z&ADA8fpsu!K|2VhcyRI zAfFp^;mjS3zlLl+1-if*T!(v67Z{jfhjJ@yUP72hDAiW;hddwCmj^%R3J%V9gk-eM$5QqT(ZWP?zvb2Mu8 zPC{5`?QJ>*;s2grVbtD7zK;NOx zKZm-{L-c+Ba~8657KPeQjZimeilwm|mcZAs3cioNsX@)@Y19MUbmk~*%gZ}sQ5|Z5 z)v+C_<8NXmFNt&#+HU8u1r`eOnAX@6)#J^m4jn}e-36Eb%bBx?T?@g^cvSnI7>;9H zei>@cx1px$bM$Ik9VAf^i}2p`ty0uJeg(B!Q&AmRi(1WJqK5Ps=El=l2d}#FkYXO+ zHzE=>Qsb}^zJb!7CjT=gpdTNE zeb^i|g}L}g1Fe}rY=)Il9Uq0Aa1!>$QzhB|u_S7jvO_WwBh>&k*BdYz&tgl=SK981 zZm5wOh3e=`EQ@KVwXg@Zd(NV!_)qMMBg%Np06c|StnuDp`-F+uk%BI$xk*Qj#BS7^ z?EtD{Col@Lh1mLV|A&y! zc36ZualgyoK`p|PVRjXFKu$1|QE#?2s1BV+EwU@9ZTbN9K>5QxCK$_L2aHFpfyK@h z===TuIuco_*oB(QJVbO!f&uP z7O7%KqAfNf{~l^_pG7U==&JU!+@~u0UyJBC1sdX0s5$)?^(0v%?W;2n>d6bEMkoT+ z(R!#SZ;g2|1@(lJob#RQQ0MPOop%!TAiqVj|8;?Tt|G9S?MPXyNqG`#&ZnTBI2D6& z32Nkap%(AA7=q7GHz*Zl+ee}vq&BK!38?cryZRI_3C+=X)CD%7-r3({6MTZ@u|akF z3Qfk5sZ5MdZKp@34NVzqekK(>OzHM z?03G5voY!&-rwclbMA1S!8X+YiyD#EHSI{ejswW2VmEx`Y+uXwBbnEvlZc`sFxK|0 z5k`|AhZ?H&sGs@vq26rgQLpSgadz7!qFyXhP>V0!<^)Hu@m_Vn22$8ZTS>b{yWr=2Gz6WJ+M3Zjo1_O)c2S{n1Z_Q8E13@ zn|}w@?kd*Q{!fgz`+O2=&NiYJ-4)bO-a~EA(hWUkHb$f7csJ_R`d`$G=oV`6-AA40 z*T{Y&s-w1D98ST3s2ASv==IG#3C;OKtb+Ql2g*QI)b?zJTD_f7HyDQcs7ynBbe5ui z_`HfcF*Lzr7UDV7E*jaynxO8>l%AYid_{ zFVxzYiF#jrj{0U?#@3j(nf>T=NBuyu64mZJ_C&uVyDj^nMr?Qz`(OKdECqU#O+$6) zLkz}as1dk{8j(lX9E&u!Bi0-Hkspj|_albl1?+)YTi6lkgL;*J;PS^&i!qD$CHvKi zLS3LG>RsOnwH@c7PTY)|(@Usrn75@J@;LM-KNj@{oQ#^%Ij9aVbmiNz2>Amp{|jnl zy*Ei{sKQ#=S7L9RM1Bx9#v7;`S7~kk3f3952G*lqOnXp6{3~jk=4xZ>D`FG!bx^xy zDz?L8sF5lCvTu8O&14e3{fG^yc#cWfpsn3rvz@1L1?A!GZ21w?5EgmG<`YqGwuRUq zkE7N~bbH&bKWZcwp%&j^tfc*a*Hx70V2AuA^w6NP{@^H+g})0BWo_1cMEQD`j&g0@ zLVY105^N%~!_|M|JVMzp($|Rv#B}mnu(`ZkIEc(xVj96uN#+$Qa^iC0C*n=wCS^L9 zEpq_B^W}K!p+=3L;C+Yo^>~73@*P?$<4C_syi0m3@jme*`7a4CqvSh2$2`Pkq7j|a z6nsJOw)MTYHHZ62XC7Lt+S@vs(f(amR{Nb+o%cdvgUl8>u(*o4Ni_YxFe~G)KOA?)kU_!^6gjT(F1fLn- zFRYqy{tQ>o^YdE@GL0!@-T96~IDpg{q8jBo67g5cSsI2fukX+sPREBXpM^I2NLQw8 zFTU)ncf} z-U!!YL031JbQm$87)n_U+GZXPDAVyRR-oLwiiFdPlJCS*; zAi>A+e~%AbO8@EAFv{nWzk^Zu6&^-?U#h)uPIl7MedA9>G?`JZay9utq73;1u52Co zv!oNa!En;SL<$k_>h*K~i$`_Z6{7A>SC|{OywG5^JMX`Ie@r}$b$mkTO*Y6?s;mU* zk1>S!fb=6`0&$f5af0uT=|=FnH=D?}C!P=uxMnrfv4OhG<0J`vKROV_X%nsepGpJ1 zL#6=frC6T$jQIbKwh?u5mkOZcgAwI^Uu9{%+!PqCVxla4?}GC;2V3n?O2) zNF|ODe-Quo2+qR%-=lE^p&zkyRN?|v$m`H2SVt`)zbiZMRC!1J;SPQM_^kVmhFl{r zp<_AGmN-t`r^FJ{8?mO^YX3hVqKV-YOeM~d?x#w3#JUT0r0hdi=1kH?PB)yoj$wVd6zY!OSs$4_&_x%L)5R64QvciKnh^ z1TG*760==dW9oJ2N4crQtHc;WM{gp8c7C?4*DNM+%2&mIwTNfP-zSoZzled9l~X;v zZ3$H=%ZJ&>XC8e>{OvNI;&|F*9&1RCB-4{v=*nj~J=*^|LWy4}{FvxMlp;(I|#=^xT3iOgdj>7R*%L`C8$6>kt9Wj1i8P?wE#UCc!kBg%43?++waQ* zXC|#&{m&Gt|%AtywHKSDcefu$Vd4fq`xKo4^f7=;Oa>F{!LM)Q5NUB z2IE^;B^=)qF%))1{lk)uk{E5JX5Ke3F^{~_T${GIZZsAGu5bawWpJc4vDe4SWA ztaNpGahXet3dC#Fzj(CJ^B3esI*Q?*7aAmzzU1;*shdms8If$8n?Fg{A^nrf*C(Hy zcDL|8Wsx`uV~KFmI=&)?k}jr9h2(L)(pyFi%odP5c;J}i5#vq5{ISzQ(oeM z(!enzdJP;oG-dJPVxD^G_jcYcT\n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stock" @@ -118,11 +118,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Commander un produit" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Commander des produits" @@ -130,7 +130,7 @@ msgstr "Commander des produits" msgid "children" msgstr "Les enfants" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Config" @@ -182,7 +182,7 @@ msgstr "Momental" msgid "successful" msgstr "Réussite" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -206,7 +206,7 @@ msgstr "Obtenir les paramètres exposables de l'application" msgid "send a message to the support team" msgstr "Envoyer un message à l'équipe d'assistance" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Demander une URL CORSée. Seul https est autorisé." @@ -452,7 +452,7 @@ msgstr "" " complété en utilisant le solde de l'utilisateur ; Si `force_payment` est " "utilisé, une transaction est initiée." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "acheter une commande sans créer de compte" @@ -758,237 +758,237 @@ msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Recherche" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Nom" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Catégories" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Catégories Limaces" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Prix minimum" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Prix maximum" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Est actif" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Marque" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Attributs" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Quantité" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Limace" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Inclure des sous-catégories" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Inclure les produits commandés par les particuliers" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Il doit y avoir un category_uuid pour utiliser le drapeau " "include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Recherche (ID, nom du produit ou numéro de pièce)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Acheté après (inclus)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Acheté avant (inclus)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Courriel de l'utilisateur" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID de l'utilisateur" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Statut" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "ID lisible par l'homme" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Parent" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Catégorie entière (avec au moins 1 produit ou non)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Niveau" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID du produit" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Clé à rechercher ou à insérer dans la cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Données à stocker dans la mémoire cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Délai d'attente en secondes pour placer les données dans le cache" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Données mises en cache" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Données JSON camélisées provenant de l'URL demandée" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Seuls les URL commençant par http(s):// sont autorisés." -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Ajouter un produit à la commande" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} introuvable !" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Supprimer tous les produits de la commande" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Acheter une commande" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Veuillez fournir soit order_uuid, soit order_hr_id - les deux s'excluent " "mutuellement !" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Le mauvais type provient de la méthode order.buy() : {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Effectuer une action sur une liste de produits dans la commande" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Supprimer/Ajouter" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "L'action doit être soit \"ajouter\", soit \"supprimer\" !" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" "Effectuer une action sur une liste de produits dans la liste de souhaits" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Veuillez indiquer la valeur de `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} introuvable !" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Ajouter un produit à la commande" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Supprimer un produit de la commande" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Acheter une commande" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -996,43 +996,43 @@ msgstr "" "Veuillez envoyer les attributs sous la forme d'une chaîne formatée comme " "attr1=valeur1,attr2=valeur2." -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" "ajouter ou supprimer un retour d'information sur une relation commande-" "produit" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "L'action doit être soit `add` soit `remove` !" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Le produit {order_product_uuid} n'a pas été trouvé !" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Chaîne d'adresse originale fournie par l'utilisateur" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "La limite doit être comprise entre 1 et 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fonctionne comme un charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Attributs" @@ -1045,11 +1045,11 @@ msgid "groups of attributes" msgstr "Groupes d'attributs" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Catégories" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Marques" @@ -1058,7 +1058,7 @@ msgid "category image url" msgstr "Catégories" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Markup Percentage" @@ -1083,7 +1083,7 @@ msgstr "Tags pour cette catégorie" msgid "products in this category" msgstr "Produits dans cette catégorie" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Vendeurs" @@ -1108,7 +1108,7 @@ msgid "represents feedback from a user." msgstr "Représente le retour d'information d'un utilisateur." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Notifications" @@ -1116,7 +1116,7 @@ msgstr "Notifications" msgid "download url for this order product if applicable" msgstr "URL de téléchargement pour ce produit de la commande, le cas échéant" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Retour d'information" @@ -1124,7 +1124,7 @@ msgstr "Retour d'information" msgid "a list of order products in this order" msgstr "Une liste des produits commandés dans cette commande" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Adresse de facturation" @@ -1152,7 +1152,7 @@ msgstr "Tous les produits de la commande sont-ils numériques ?" msgid "transactions for this order" msgstr "Transactions pour cette commande" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Commandes" @@ -1164,19 +1164,19 @@ msgstr "Image URL" msgid "product's images" msgstr "Images du produit" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Catégorie" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Retour d'information" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Marque" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Groupes d'attributs" @@ -1204,7 +1204,7 @@ msgstr "Nombre de retours d'information" msgid "only available for personal orders" msgstr "Produits disponibles uniquement pour les commandes personnelles" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produits" @@ -1216,15 +1216,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produits en vente" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promotions" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Vendeur" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1232,11 +1232,11 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Liste de souhaits" @@ -1244,7 +1244,7 @@ msgstr "Liste de souhaits" msgid "tagged products" msgstr "Produits marqués" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Étiquettes du produit" @@ -1331,7 +1331,7 @@ msgstr "Résultats de la recherche de produits" msgid "posts search results" msgstr "Résultats de la recherche de produits" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1344,23 +1344,23 @@ msgstr "" "hiérarchique. Cela peut être utile pour catégoriser et gérer les attributs " "plus efficacement dans un système complexe." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Parent de ce groupe" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Groupe d'attributs parent" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Nom du groupe d'attributs" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Groupe d'attributs" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1380,42 +1380,50 @@ msgstr "" "permet de l'utiliser dans des systèmes qui interagissent avec des vendeurs " "tiers." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stocke les informations d'identification et les points d'extrémité " "nécessaires à la communication avec l'API du fournisseur." -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Informations sur l'authentification" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" "Définir la majoration pour les produits récupérés auprès de ce fournisseur" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Pourcentage de marge du vendeur" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Nom de ce vendeur" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Nom du vendeur" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "dossier de réponse" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "la dernière réponse du vendeur en matière de traitement" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Chemin d'accès au fichier d'intégration du fournisseur" + +#: core/models.py:154 +msgid "integration path" +msgstr "Parcours d'intégration" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1430,27 +1438,27 @@ msgstr "" "biais de mixins et permet de personnaliser les métadonnées à des fins " "administratives." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Identifiant interne de l'étiquette du produit" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Nom du jour" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Nom convivial pour l'étiquette du produit" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Étiquette du produit" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1461,15 +1469,15 @@ msgstr "" " et classer des produits. Elle comprend des attributs pour un identifiant de" " balise interne et un nom d'affichage convivial." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "étiquette de catégorie" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "balises de catégorie" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1493,52 +1501,52 @@ msgstr "" "catégories, ainsi que d'attribuer des attributs tels que des images, des " "balises ou une priorité." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Télécharger une image représentant cette catégorie" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Image de catégorie" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" "Définir un pourcentage de majoration pour les produits de cette catégorie" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Parent de cette catégorie pour former une structure hiérarchique" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Catégorie de parents" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Nom de la catégorie" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Donnez un nom à cette catégorie" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Ajouter une description détaillée pour cette catégorie" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Description de la catégorie" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "les étiquettes qui aident à décrire ou à regrouper cette catégorie" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Priorité" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1552,47 +1560,47 @@ msgstr "" "de priorité. Elle permet d'organiser et de représenter les données relatives" " à la marque dans l'application." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Nom de cette marque" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Nom de marque" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Télécharger un logo représentant cette marque" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Petite image de marque" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Télécharger un grand logo représentant cette marque" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Une grande image de marque" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Ajouter une description détaillée de la marque" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Description de la marque" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Catégories facultatives auxquelles cette marque est associée" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Catégories" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1608,68 +1616,68 @@ msgstr "" "Elle fait partie du système de gestion des stocks pour permettre le suivi et" " l'évaluation des produits disponibles auprès de différents fournisseurs." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Vendeur associé" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Prix de vente" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Produit associé" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Quantité en stock" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "UGS du vendeur" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Fichier numérique" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Entrées de stock" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1691,51 +1699,51 @@ msgstr "" "performances. Elle est utilisée pour définir et manipuler les données " "produit et les informations associées dans une application." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Catégorie à laquelle appartient ce produit" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Possibilité d'associer ce produit à une marque" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Indique si ce produit est livré numériquement" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Le produit est-il numérique ?" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Fournir un nom d'identification clair pour le produit" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Nom du produit" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Description du produit" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Numéro de pièce pour ce produit" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Numéro de pièce" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Unité de gestion des stocks pour ce produit" @@ -1804,11 +1812,11 @@ msgstr "Nom de cet attribut" msgid "attribute's name" msgstr "Nom de l'attribut" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "est filtrable" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quels attributs et valeurs peuvent être utilisés pour filtrer cette " @@ -1869,27 +1877,27 @@ msgstr "Texte alt de l'image" msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Image du produit" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Priorité à l'affichage" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Images du produit" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1906,39 +1914,39 @@ msgstr "" "Elle s'intègre au catalogue de produits pour déterminer les articles " "concernés par la campagne." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Nom de la promotion" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Produits inclus" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promotion" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1952,23 +1960,23 @@ msgstr "" "opérations permettant d'ajouter et de supprimer plusieurs produits à la " "fois." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Liste de souhaits" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1985,19 +1993,19 @@ msgstr "" "documentaires. Elle étend les fonctionnalités de mixins spécifiques et " "fournit des fonctionnalités personnalisées supplémentaires." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documentaire" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Non résolu" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2020,59 +2028,59 @@ msgstr "" "adresse à un utilisateur, ce qui facilite le traitement personnalisé des " "données." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Ligne d'adresse du client" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Ligne d'adresse" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Rue" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "District" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Ville" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Région" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Code postal" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Pays" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Point de géolocalisation (longitude, latitude)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Réponse JSON complète du géocodeur pour cette adresse" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Réponse JSON stockée du service de géocodage" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adresse" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresses" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2090,76 +2098,76 @@ msgstr "" "d'appliquer le code promotionnel à une commande tout en veillant à ce que " "les contraintes soient respectées." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "" "Code unique utilisé par un utilisateur pour bénéficier d'une réduction" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" "Montant fixe de la remise appliqué si le pourcentage n'est pas utilisé" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Pourcentage de réduction appliqué si le montant fixe n'est pas utilisé" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Heure de fin de validité" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Heure de début de validité" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Date à laquelle le code promotionnel a été utilisé, vide s'il n'a pas encore" " été utilisé." -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Utilisateur assigné" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Code promo" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Codes promotionnels" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2167,16 +2175,16 @@ msgstr "" "Un seul type de remise doit être défini (montant ou pourcentage), mais pas " "les deux ni aucun des deux." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Type de réduction non valide pour le code promo {self.uuid} !" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2194,145 +2202,145 @@ msgstr "" " peuvent être mis à jour. De même, la fonctionnalité permet de gérer les " "produits dans le cycle de vie de la commande." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "L'adresse de facturation utilisée pour cette commande" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Code promo optionnel appliqué à cette commande" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Code promo appliqué" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "L'adresse de livraison utilisée pour cette commande" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Adresse de livraison" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Statut actuel de la commande dans son cycle de vie" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Statut de la commande" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Structure JSON des notifications à afficher aux utilisateurs ; dans " "l'interface d'administration, la vue en tableau est utilisée." -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Représentation JSON des attributs de cette commande" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "L'utilisateur qui a passé la commande" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Utilisateur" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "L'heure à laquelle la commande a été finalisée." -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Temps d'achat" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Un identifiant lisible par l'homme pour la commande" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID lisible par l'homme" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Commande" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Un utilisateur ne peut avoir qu'un seul ordre en cours à la fois !" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Vous ne pouvez pas ajouter de produits à une commande qui n'est pas en " "cours." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" "Vous ne pouvez pas ajouter plus de produits que ceux disponibles en stock" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}> !" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Vous ne pouvez acheter que des produits physiques dont l'adresse de " "livraison est spécifiée !" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "L'adresse n'existe pas" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Vous ne pouvez pas acheter en ce moment, veuillez réessayer dans quelques " "minutes." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Valeur de force non valide" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Un utilisateur sans solde ne peut pas acheter avec un solde !" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2341,7 +2349,7 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2349,7 +2357,7 @@ msgstr "" "Méthode de paiement non valide : {payment_method} de " "{available_payment_methods} !" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2373,111 +2381,111 @@ msgstr "" "modèle s'intègre aux modèles de commande et de produit et stocke une " "référence à ces derniers." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Le prix payé par le client pour ce produit au moment de l'achat" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Commentaires internes" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Ordonnance parentale" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Quantité de produits" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Statut de la ligne de produits" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Le produit doit être associé à une commande !" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Mauvaise action spécifiée pour le retour d'information : {action} !" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" "Vous ne pouvez pas retirer des produits d'une commande qui n'est pas en " "cours." -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Nom" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL de l'intégration" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Références d'authentification" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Vous ne pouvez avoir qu'un seul fournisseur de CRM par défaut" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Lien CRM de la commande" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Liens CRM des commandes" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2494,15 +2502,15 @@ msgstr "" "méthode permettant de générer une URL pour le téléchargement de l'actif " "lorsque la commande associée est terminée." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Télécharger" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Téléchargements" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2518,64 +2526,56 @@ msgstr "" "La classe utilise des champs de base de données pour modéliser et gérer " "efficacement les données de feedback." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Commentaires des utilisateurs sur leur expérience du produit" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Commentaires" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Fait référence au produit spécifique d'une commande sur lequel porte le " "retour d'information." -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Produit de commande apparenté" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Note attribuée par l'utilisateur au produit" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Evaluation du produit" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "vous devez fournir un commentaire, une note et l'uuid du produit commandé " "pour ajouter un commentaire." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Erreur lors de la création du promocode : {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Accueil" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Nous contacter" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "À propos de nous" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Informations sur le paiement" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Livraison" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2752,11 +2752,11 @@ msgstr "" "tous les droits\n" " réservés" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Les données et le délai d'attente sont tous deux nécessaires" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "La valeur du délai d'attente n'est pas valide, elle doit être comprise entre" @@ -2790,7 +2790,7 @@ msgstr "Vous n'êtes pas autorisé à effectuer cette action." msgid "NOMINATIM_URL must be configured." msgstr "Le paramètre NOMINATIM_URL doit être configuré !" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2854,15 +2854,23 @@ msgstr "Traite les demandes de recherche globales." 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." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid est obligatoire" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois" -#: core/views.py:315 +#: core/views.py:318 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" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Le produit de la commande n'a pas de produit" + +#: core/views.py:359 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." @@ -2870,11 +2878,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon introuvable" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2882,7 +2890,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2893,7 +2901,11 @@ msgstr "" " d'index de l'interface d'administration de Django. Elle utilise la fonction" " `redirect` de Django pour gérer la redirection HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Renvoie la version actuelle d'eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2908,7 +2920,7 @@ msgstr "" "l'action en cours, les autorisations personnalisables et les formats de " "rendu." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2922,7 +2934,7 @@ msgstr "" "couche API de l'application et fournit un moyen normalisé de traiter les " "demandes et les réponses concernant les données de l'AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2939,7 +2951,7 @@ msgstr "" "récupération d'informations détaillées ou simplifiées en fonction de la " "demande." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2954,7 +2966,7 @@ msgstr "" "actions. Les capacités de filtrage sont fournies par le backend " "DjangoFilter." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2969,7 +2981,7 @@ msgstr "" "également des permissions pour s'assurer que seuls les utilisateurs " "autorisés peuvent accéder à des données spécifiques." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2982,7 +2994,7 @@ msgstr "" " simplifier la mise en œuvre des points d'extrémité de l'API pour les objets" " Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -3000,7 +3012,7 @@ msgstr "" "comprend des méthodes pour récupérer les détails d'un produit, appliquer des" " permissions et accéder aux commentaires connexes d'un produit." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -3016,7 +3028,7 @@ msgstr "" "ressources relatives aux vendeurs par l'intermédiaire du cadre REST de " "Django." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3034,7 +3046,7 @@ msgstr "" "la classe de base `EvibesViewSet` et utilise le système de filtrage de " "Django pour l'interrogation des données." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3054,7 +3066,7 @@ msgstr "" "autorisations en conséquence lors de l'interaction avec les données de la " "commande." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3069,11 +3081,11 @@ msgstr "" " En outre, il fournit une action détaillée pour gérer le retour " "d'informations sur les instances OrderProduct." -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Gère les opérations liées aux images des produits dans l'application." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3081,15 +3093,15 @@ msgstr "" "Gère la récupération et le traitement des instances de PromoCode par le " "biais de diverses actions API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Représente un jeu de vues pour la gestion des promotions." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Gère les opérations liées aux données de stock dans le système." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3109,7 +3121,7 @@ msgstr "" "ne peuvent gérer que leur propre liste de souhaits, sauf si des permissions " "explicites sont accordées." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3124,12 +3136,12 @@ msgstr "" " HTTP, des dérogations au sérialiseur et une gestion des autorisations basée" " sur le contexte de la demande." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erreur de géocodage : {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/he_IL/LC_MESSAGES/django.mo b/core/locale/he_IL/LC_MESSAGES/django.mo index 9987a4a45d5175e0fc8cd24edfd2c8a5e4455922..e772f6592b13abb46df0f8ba72564e9a9a4493a2 100644 GIT binary patch delta 13110 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 delta 12826 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 diff --git a/core/locale/he_IL/LC_MESSAGES/django.po b/core/locale/he_IL/LC_MESSAGES/django.po index c63acef1..27e3e3db 100644 --- a/core/locale/he_IL/LC_MESSAGES/django.po +++ b/core/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "תמונה" msgid "images" msgstr "תמונות" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "מלאי" @@ -114,11 +114,11 @@ msgstr "מלאי" msgid "stocks" msgstr "מניות" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "הזמן מוצר" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "הזמנת מוצרים" @@ -126,7 +126,7 @@ msgstr "הזמנת מוצרים" msgid "children" msgstr "ילדים" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "תצורה" @@ -178,7 +178,7 @@ msgstr "Momental" msgid "successful" msgstr "מוצלח" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "קלט/פלט מטמון" @@ -202,7 +202,7 @@ msgstr "קבל את הפרמטרים החשופים של היישום" msgid "send a message to the support team" msgstr "שלח הודעה לצוות התמיכה" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "בקש כתובת URL של CORS. מותר להשתמש רק ב-https." @@ -429,7 +429,7 @@ msgstr "" "מסיים את רכישת ההזמנה. אם נעשה שימוש ב-`force_balance`, הרכישה תושלם באמצעות" " היתרה של המשתמש; אם נעשה שימוש ב-`force_payment`, תתבצע עסקה." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "לרכוש הזמנה ללא יצירת חשבון" @@ -697,271 +697,271 @@ msgstr "מחיקת קשר בין הזמנה למוצר" msgid "add or remove feedback on an order–product relation" msgstr "הוספה או הסרה של משוב על קשר בין הזמנה למוצר" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "לא צויין מונח חיפוש." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "חיפוש" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "שם" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "קטגוריות" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "קטגוריות שבלולים" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "תגיות" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "מחיר מינימום" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "מחיר מקסימלי" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "פעיל" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "מותג" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "תכונות" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "כמות" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "שבלול" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "האם דיגיטלי" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "כלול תת-קטגוריות" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "כלול מוצרים שהוזמנו באופן אישי" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "מספר קטלוגי" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "חייב להיות category_uuid כדי להשתמש בדגל include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "חיפוש (מזהה, שם מוצר או מספר חלק)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "נקנה לאחר (כולל)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "נקנה לפני כן (כולל)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "דוא\"ל המשתמש" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID של המשתמש" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "סטטוס" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "מזהה קריא על ידי בני אדם" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "הורה" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "קטגוריה שלמה (יש לפחות מוצר אחד או לא)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "רמה" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID של המוצר" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "מפתח לחיפוש או להגדרה במטמון" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "נתונים לאחסון במטמון" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "פסק זמן בשניות להגדרת הנתונים במטמון" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "נתונים במטמון" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "הוסף מוצר להזמנה" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ההזמנה {order_uuid} לא נמצאה!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "הסר את כל המוצרים מההזמנה" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "קנה הזמנה" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "אנא ספק את order_uuid או order_hr_id - אחד מהם בלבד!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "סוג שגוי הגיע משיטת order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "בצע פעולה ברשימת המוצרים בהזמנה" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "הסר/הוסף" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "הפעולה חייבת להיות \"הוספה\" או \"הסרה\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "בצע פעולה ברשימת המוצרים ברשימת המשאלות" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "אנא ספק את הערך `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "רשימת המשאלות {wishlist_uuid} לא נמצאה!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "הוסף מוצר להזמנה" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "הסר מוצר מההזמנה" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "קנה הזמנה" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "אנא שלחו את התכונות כמחרוזת מעוצבת כך: attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "הוספה או מחיקה של משוב עבור המוצר שהוזמן" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "הפעולה חייבת להיות `add` או `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "המוצר {order_product_uuid} לא נמצא!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "מחרוזת הכתובת המקורית שסופקה על ידי המשתמש" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "הגבול חייב להיות בין 1 ל-10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - עובד כמו קסם" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "תכונות" @@ -974,11 +974,11 @@ msgid "groups of attributes" msgstr "קבוצות תכונות" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "קטגוריות" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "מותגים" @@ -987,7 +987,7 @@ msgid "category image url" msgstr "קטגוריות" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "אחוז הסימון" @@ -1008,7 +1008,7 @@ msgstr "תגיות עבור קטגוריה זו" msgid "products in this category" msgstr "מוצרים בקטגוריה זו" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "ספקים" @@ -1033,7 +1033,7 @@ msgid "represents feedback from a user." msgstr "מייצג משוב ממשתמש." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "הודעות" @@ -1041,7 +1041,7 @@ msgstr "הודעות" msgid "download url for this order product if applicable" msgstr "כתובת URL להורדת המוצר שהוזמן, אם רלוונטי" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "משוב" @@ -1049,7 +1049,7 @@ msgstr "משוב" msgid "a list of order products in this order" msgstr "רשימת המוצרים בהזמנה זו" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "כתובת לחיוב" @@ -1076,7 +1076,7 @@ msgstr "האם כל המוצרים בהזמנה הם דיגיטליים?" msgid "transactions for this order" msgstr "עסקאות עבור הזמנה זו" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "הזמנות" @@ -1088,19 +1088,19 @@ msgstr "כתובת URL של התמונה" msgid "product's images" msgstr "תמונות המוצר" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "קטגוריה" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "משובים" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "מותג" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "קבוצות תכונות" @@ -1128,7 +1128,7 @@ msgstr "מספר המשובים" msgid "only available for personal orders" msgstr "מוצרים זמינים רק להזמנות אישיות" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "מוצרים" @@ -1140,15 +1140,15 @@ msgstr "קודי קידום מכירות" msgid "products on sale" msgstr "מוצרים במבצע" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "מבצעים" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "ספק" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1156,11 +1156,11 @@ msgstr "ספק" msgid "product" msgstr "מוצר" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "מוצרים ברשימת המשאלות" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "רשימות משאלות" @@ -1168,7 +1168,7 @@ msgstr "רשימות משאלות" msgid "tagged products" msgstr "מוצרים מתויגים" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "תגיות מוצר" @@ -1253,7 +1253,7 @@ msgstr "תוצאות חיפוש מוצרים" msgid "posts search results" msgstr "תוצאות חיפוש מוצרים" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1264,23 +1264,23 @@ msgstr "" "קבוצות תכונות. לקבוצת תכונות יכולה להיות קבוצת אב, היוצרת מבנה היררכי. זה " "יכול להיות שימושי לסיווג וניהול תכונות בצורה יעילה יותר במערכת מורכבת." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "הורה של קבוצה זו" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "קבוצת תכונות הורה" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "שם קבוצת התכונות" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "קבוצת תכונות" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1296,39 +1296,47 @@ msgstr "" "הנרכשים מהספק. מודל זה גם מתחזק מטא-נתונים ואילוצים נוספים, מה שהופך אותו " "מתאים לשימוש במערכות המקיימות אינטראקציה עם ספקים צד שלישי." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "מאחסן את פרטי ההזדהות ונקודות הקצה הנדרשים לתקשורת API של הספק" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "מידע אימות" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "הגדר את הסימון עבור מוצרים שנרכשו מספק זה" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "אחוז תוספת הספק" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "שם הספק הזה" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "שם הספק" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "קובץ תגובה" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "תגובת העיבוד האחרונה של הספק" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "נתיב קובץ האינטגרציה של הספק" + +#: core/models.py:154 +msgid "integration path" +msgstr "נתיב אינטגרציה" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1341,27 +1349,27 @@ msgstr "" "ידידותי למשתמש. היא תומכת בפעולות המיוצאות באמצעות mixins ומספקת התאמה אישית" " של מטא-נתונים למטרות ניהוליות." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "מזהה תווית פנימי עבור תווית המוצר" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "שם היום" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "שם ידידותי למשתמש עבור תווית המוצר" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "שם תצוגה של התג" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "תגית מוצר" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1371,15 +1379,15 @@ msgstr "" "להשתמש בה כדי לקשר ולסווג מוצרים. היא כוללת תכונות עבור מזהה תווית פנימי ושם" " תצוגה ידידותי למשתמש." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "תגית קטגוריה" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "תגיות קטגוריה" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1398,51 +1406,51 @@ msgstr "" "דומות אחרות בתוך יישום, ומאפשרת למשתמשים או למנהלים לציין את השם, התיאור " "וההיררכיה של הקטגוריות, וכן להקצות תכונות כגון תמונות, תגיות או עדיפות." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "העלה תמונה המייצגת קטגוריה זו" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "תמונה בקטגוריה" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "הגדר אחוז תוספת מחיר עבור מוצרים בקטגוריה זו" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "הורה של קטגוריה זו כדי ליצור מבנה היררכי" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "קטגוריה ראשית" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "שם הקטגוריה" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "ציין שם לקטגוריה זו" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "הוסף תיאור מפורט לקטגוריה זו" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "תיאור הקטגוריה" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "תגיות המסייעות לתאר או לקבץ קטגוריה זו" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "עדיפות" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1454,47 +1462,47 @@ msgstr "" " שמו, לוגואים, תיאור, קטגוריות קשורות, סלוגן ייחודי וסדר עדיפות. היא מאפשרת " "ארגון וייצוג של נתונים הקשורים למותג בתוך היישום." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "שם המותג" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "שם המותג" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "העלה לוגו המייצג את המותג הזה" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "תמונה קטנה של המותג" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "העלה לוגו גדול המייצג את המותג הזה" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "תמונה גדולה של המותג" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "הוסף תיאור מפורט של המותג" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "תיאור המותג" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "קטגוריות אופציונליות שהמותג הזה קשור אליהן" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "קטגוריות" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1508,68 +1516,68 @@ msgstr "" "רכישה, כמות, SKU ונכסים דיגיטליים. היא מהווה חלק ממערכת ניהול המלאי ומאפשרת " "מעקב והערכה של מוצרים הזמינים מספקים שונים." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "הספק המספק את מלאי המוצר הזה" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "ספק נלווה" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "המחיר הסופי ללקוח לאחר תוספות" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "מחיר המכירה" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "המוצר הקשור לרישום המלאי הזה" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "מוצר נלווה" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "המחיר ששולם למוכר עבור מוצר זה" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "מחיר הרכישה של הספק" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "כמות המוצר הזמינה במלאי" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "כמות במלאי" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU שהוקצה על ידי הספק לזיהוי המוצר" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "מק\"ט הספק" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "קובץ דיגיטלי הקשור למלאי זה, אם רלוונטי" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "קובץ דיגיטלי" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "רישומים במלאי" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1587,51 +1595,51 @@ msgstr "" "ומנהלת את המטמון עבור תכונות הנגישות בתדירות גבוהה כדי לשפר את הביצועים. הוא" " משמש להגדרה ולעיבוד נתוני מוצר והמידע הקשור אליו בתוך יישום." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "הקטגוריה אליה שייך מוצר זה" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "באופן אופציונלי, ניתן לשייך מוצר זה למותג" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "תגיות המסייעות לתאר או לקבץ מוצר זה" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "מציין אם מוצר זה נמסר באופן דיגיטלי" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "האם המוצר הוא דיגיטלי?" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "ספק שם מזהה ברור למוצר" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "שם המוצר" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "הוסף תיאור מפורט של המוצר" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "תיאור המוצר" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "מספר חלק עבור מוצר זה" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "מספר חלק" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "יחידת אחסון מלאי עבור מוצר זה" @@ -1698,11 +1706,11 @@ msgstr "שם התכונה הזו" msgid "attribute's name" msgstr "שם התכונה" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "ניתן לסינון" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "מציין אם ניתן להשתמש בתכונה זו לצורך סינון או לא" @@ -1756,27 +1764,27 @@ msgstr "טקסט חלופי לתמונה" msgid "upload the image file for this product" msgstr "העלה את קובץ התמונה עבור מוצר זה" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "תמונת מוצר" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "קובע את סדר הצגת התמונות" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "עדיפות תצוגה" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "המוצר שהדימוי הזה מייצג" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "תמונות מוצרים" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1790,39 +1798,39 @@ msgstr "" "להגדרת שיעור ההנחה, מתן פרטים על המבצע וקישורו למוצרים הרלוונטיים. היא " "משתלבת בקטלוג המוצרים כדי לקבוע את הפריטים המושפעים בקמפיין." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "אחוז ההנחה עבור המוצרים שנבחרו" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "אחוז ההנחה" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "ציין שם ייחודי לקידום מכירות זה" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "שם המבצע" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "תיאור המבצע" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "בחר אילו מוצרים כלולים במבצע זה" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "מוצרים כלולים" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "קידום" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1833,23 +1841,23 @@ msgstr "" "פונקציונליות לניהול אוסף מוצרים, תומכת בפעולות כגון הוספה והסרה של מוצרים, " "וכן תומכת בפעולות להוספה והסרה של מספר מוצרים בבת אחת." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "מוצרים שהמשתמש סימן כנחשקים" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "המשתמש שבבעלותו רשימת המשאלות הזו" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "בעל רשימת המשאלות" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "רשימת משאלות" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1863,19 +1871,19 @@ msgstr "" "בסוג הקובץ ובנתיב האחסון של קבצי התיעוד. היא מרחיבה את הפונקציונליות של " "מיקסים ספציפיים ומספקת תכונות מותאמות אישית נוספות." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "סרט תיעודי" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "סרטים תיעודיים" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "לא פתור" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1894,59 +1902,59 @@ msgstr "" "נוספים. הסוג גם מאפשר לקשר כתובת למשתמש, מה שמקל על טיפול בנתונים מותאמים " "אישית." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "שורת כתובת עבור הלקוח" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "שורת כתובת" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "רחוב" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "מחוז" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "עיר" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "אזור" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "מיקוד" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "מדינה" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "נקודת מיקום גיאוגרפי (אורך, רוחב)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "תגובה JSON מלאה מ-geocoder עבור כתובת זו" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "תגובת JSON שמורה משירות הגיאו-קידוד" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "כתובת" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "כתובות" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1961,87 +1969,87 @@ msgstr "" "יש) ומצב השימוש בו. היא כוללת פונקציונליות לאימות והחלת קוד הקידום על הזמנה," " תוך הקפדה על עמידה באילוצים." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "קוד ייחודי המשמש את המשתמש למימוש הנחה" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "מזהה קוד קידום מכירות" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "סכום הנחה קבוע המוחל אם לא נעשה שימוש באחוזים" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "סכום הנחה קבוע" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "אחוז ההנחה שיחול אם לא ייעשה שימוש בסכום הקבוע" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "אחוז ההנחה" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "חותמת זמן לתוקף הקוד המקדם מכירות" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "תוקף הסוף" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "תאריך התחילה של תוקף קוד המבצע" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "תחילת תוקף" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "חותמת זמן שבה נעשה שימוש בקוד המבצע, ריק אם טרם נעשה בו שימוש" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "חותמת זמן שימוש" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "משתמש שהוקצה לקוד קידום מכירות זה, אם רלוונטי" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "משתמש שהוקצה" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "קוד קידום מכירות" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "קודי קידום מכירות" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" "יש להגדיר סוג הנחה אחד בלבד (סכום או אחוז), אך לא את שניהם או אף אחד מהם." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "קוד המבצע כבר נוצל" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "סוג הנחה לא חוקי עבור קוד קידום מכירות {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2056,134 +2064,134 @@ msgstr "" "כתובות ולעדכן פרטי משלוח או חיוב. כמו כן, הפונקציונליות תומכת בניהול המוצרים" " במחזור החיים של ההזמנה." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "כתובת החיוב המשמשת להזמנה זו" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "קוד קידום מכירות אופציונלי שהוחל על הזמנה זו" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "קוד קידום מכירות שהוחל" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "כתובת המשלוח המשמשת להזמנה זו" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "כתובת למשלוח" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "הסטטוס הנוכחי של ההזמנה במחזור החיים שלה" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "סטטוס ההזמנה" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "מבנה JSON של הודעות שיוצגו למשתמשים, בממשק המשתמש המנהלי נעשה שימוש בתצוגת " "טבלה." -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "ייצוג JSON של תכונות ההזמנה עבור הזמנה זו" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "המשתמש שהזמין את ההזמנה" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "משתמש" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "החותמת הזמן שבה הושלמה ההזמנה" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "לקנות זמן" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "מזהה קריא לאדם עבור ההזמנה" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "מזהה קריא על ידי בני אדם" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "הזמנה" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "למשתמש יכול להיות רק הזמנה אחת בהמתנה בכל פעם!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "לא ניתן להוסיף מוצרים להזמנה שאינה בהמתנה." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "לא ניתן להוסיף מוצרים לא פעילים להזמנה" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "לא ניתן להוסיף מוצרים מעבר למלאי הזמין" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "לא ניתן להסיר מוצרים מהזמנה שאינה בהמתנה." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} אינו קיים בשאילתה <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "קוד קידום מכירות אינו קיים" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "ניתן לרכוש מוצרים פיזיים רק עם ציון כתובת משלוח!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "הכתובת אינה קיימת" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "לא ניתן לבצע רכישה כרגע, אנא נסה שוב בעוד מספר דקות." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "ערך כוח לא חוקי" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "אי אפשר לרכוש הזמנה ריקה!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "אי אפשר לקנות הזמנה בלי משתמש!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "משתמש ללא יתרה לא יכול לקנות עם יתרה!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "אין מספיק כסף כדי להשלים את ההזמנה" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2191,13 +2199,13 @@ msgstr "" "אינך יכול לרכוש ללא רישום, אנא ספק את הפרטים הבאים: שם הלקוח, דוא\"ל הלקוח, " "מספר הטלפון של הלקוח" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "אמצעי תשלום לא חוקי: {payment_method} מ-{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2216,108 +2224,108 @@ msgstr "" "הכולל או יצירת כתובת URL להורדה עבור מוצרים דיגיטליים. המודל משתלב עם מודלי " "Order ו-Product ומאחסן הפניה אליהם." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "המחיר ששילם הלקוח עבור מוצר זה בעת הרכישה" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "מחיר הרכישה בעת ההזמנה" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "הערות פנימיות למנהלים אודות מוצר זה שהוזמן" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "הערות פנימיות" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "הודעות למשתמשים" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "ייצוג JSON של תכונות פריט זה" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "תכונות המוצר שהוזמן" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "הפניה להזמנה הראשית המכילה מוצר זה" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "הזמנת הורים" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "המוצר הספציפי הקשור לשורת הזמנה זו" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "כמות המוצר הספציפי הזה בהזמנה" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "כמות המוצר" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "הסטטוס הנוכחי של מוצר זה בהזמנה" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "סטטוס קו המוצרים" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "המוצר בהזמנה חייב להיות קשור להזמנה!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "פעולה שגויה שצוינה עבור משוב: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "אינך יכול להחזיר הזמנה שלא התקבלה" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "שם" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "כתובת ה-URL של האינטגרציה" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "אישורי אימות" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "ניתן להגדיר ספק CRM ברירת מחדל אחד בלבד" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "קישור CRM של ההזמנה" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "קישורי CRM של הזמנות" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2332,15 +2340,15 @@ msgstr "" " היא כוללת שיטה ליצירת כתובת URL להורדת הנכס כאשר ההזמנה הקשורה נמצאת במצב " "'הושלמה'." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "הורדה" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "הורדות" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2353,60 +2361,52 @@ msgstr "" "הקשור בהזמנה ודירוג שהוקצה על ידי המשתמש. המחלקה משתמשת בשדות מסד נתונים כדי" " למדל ולנהל ביעילות נתוני משוב." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "הערות שסיפקו המשתמשים על חווייתם עם המוצר" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "הערות משוב" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "מתייחס למוצר הספציפי בהזמנה שעליה מתייחס משוב זה." -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "מוצר בהזמנה קשורה" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "דירוג שהוקצה על ידי המשתמש למוצר" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "דירוג מוצר" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "עליך לספק תגובה, דירוג ומספר זיהוי מוצר (uuid) כדי להוסיף משוב." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "שגיאה במהלך יצירת קוד קידום מכירות: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "בית" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "צור קשר" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "אודות" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "פרטי תשלום" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "משלוח" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2568,11 +2568,11 @@ msgid "" " reserved" msgstr "כל הזכויות שמורות" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "נדרשים הן הנתונים והן זמן ההמתנה" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ערך זמן המתנה לא חוקי, הוא חייב להיות בין 0 ל-216000 שניות" @@ -2604,7 +2604,7 @@ msgstr "אין לך הרשאה לבצע פעולה זו." msgid "NOMINATIM_URL must be configured." msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "מידות התמונה לא יעלו על w{max_width} x h{max_height} פיקסלים!" @@ -2660,15 +2660,23 @@ msgstr "מטפל בשאילתות חיפוש גלובליות." msgid "Handles the logic of buying as a business without registration." msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid נדרש" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "למוצר ההזמנה אין מוצר" + +#: core/views.py:359 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." @@ -2677,11 +2685,11 @@ msgstr "" "הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " "HTTP 404 המציינת שהמשאב אינו זמין." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "לא נמצא סמל מועדף" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2690,7 +2698,7 @@ msgstr "" "המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " "שגיאת HTTP 404 המציינת שהמשאב אינו זמין." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2700,7 +2708,11 @@ msgstr "" " אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " "של Django לטיפול בהפניה HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "מחזיר את הגרסה הנוכחית של eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2713,7 +2725,7 @@ msgstr "" "Evibes. היא כוללת תמיכה במחלוקות סריאליזציה דינמיות המבוססות על הפעולה " "הנוכחית, הרשאות הניתנות להתאמה אישית ופורמטים של עיבוד." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2726,7 +2738,7 @@ msgstr "" "משכבת ה-API של היישום ומספקת דרך סטנדרטית לעיבוד בקשות ותגובות עבור נתוני " "AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2740,7 +2752,7 @@ msgstr "" "של אובייקטי Attribute, ומאפשרת שליטה דינמית על הנתונים המוחזרים, כגון סינון " "לפי שדות ספציפיים או אחזור מידע מפורט לעומת מידע מפושט, בהתאם לבקשה." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2753,7 +2765,7 @@ msgstr "" "במנגנוני סט התצוגה של Django REST Framework ומשתמש בממירים מתאימים לפעולות " "שונות. יכולות סינון מסופקות באמצעות DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2766,7 +2778,7 @@ msgstr "" "וסידור נתוני קטגוריות. מערך התצוגות גם אוכף הרשאות כדי להבטיח שרק משתמשים " "מורשים יוכלו לגשת לנתונים ספציפיים." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2777,7 +2789,7 @@ msgstr "" "לשאילתה, סינון וסידור אובייקטים של מותג. היא משתמשת במערך ViewSet של Django " "כדי לפשט את היישום של נקודות קצה API לאובייקטים של מותג." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2793,7 +2805,7 @@ msgstr "" " עבור פעולות RESTful API. כוללת שיטות לאחזור פרטי מוצר, החלת הרשאות וגישה " "למשוב הקשור למוצר." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2806,7 +2818,7 @@ msgstr "" " המשמשות לטיפול בפעולות שונות. מטרת מחלקה זו היא לספק גישה יעילה למשאבים " "הקשורים לספק באמצעות מסגרת Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2821,7 +2833,7 @@ msgstr "" " היא מרחיבה את `EvibesViewSet` הבסיסי ומשתמשת במערכת הסינון של Django " "לשאילתת נתונים." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2838,7 +2850,7 @@ msgstr "" "בהתאם לפעולה הספציפית המתבצעת ומאכוף הרשאות בהתאם בעת אינטראקציה עם נתוני " "הזמנה." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2851,25 +2863,25 @@ msgstr "" "הרשאות והחלפת סריאלייזר בהתאם לפעולה המבוקשת. בנוסף, הוא מספק פעולה מפורטת " "לטיפול במשוב על מופעים של OrderProduct." -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "מנהל פעולות הקשורות לתמונות מוצרים ביישום." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "מנהל את אחזור וטיפול במקרי PromoCode באמצעות פעולות API שונות." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "מייצג קבוצת תצוגות לניהול מבצעים." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "מטפל בפעולות הקשורות לנתוני המלאי במערכת." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2886,7 +2898,7 @@ msgstr "" "שמשתמשים יוכלו לנהל רק את רשימות המשאלות שלהם, אלא אם כן ניתנו הרשאות " "מפורשות." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2899,12 +2911,12 @@ msgstr "" "לישויות כתובת. היא כוללת התנהגויות מיוחדות עבור שיטות HTTP שונות, עקיפת " "סריאלייזר וטיפול בהרשאות בהתבסס על הקשר הבקשה." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "שגיאת קידוד גיאוגרפי: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po index ef29e6ec..5484345d 100644 --- a/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -108,7 +108,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "" @@ -116,11 +116,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "" @@ -128,7 +128,7 @@ msgstr "" msgid "children" msgstr "" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "" @@ -180,7 +180,7 @@ msgstr "" msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" @@ -202,7 +202,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" @@ -414,7 +414,7 @@ msgid "" "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" @@ -682,271 +682,271 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "" @@ -959,11 +959,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "" @@ -972,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "" @@ -992,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "" @@ -1017,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "" @@ -1025,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "" @@ -1033,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "" @@ -1059,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "" @@ -1071,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "" @@ -1111,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "" @@ -1123,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1139,11 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "" @@ -1151,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "" @@ -1236,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1244,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1271,39 +1271,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "" + +#: core/models.py:154 +msgid "integration path" +msgstr "" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1312,42 +1320,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1360,51 +1368,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1412,47 +1420,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1462,67 +1470,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 core/models.py:1644 msgid "associated product" msgstr "" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1534,51 +1542,51 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "" @@ -1640,11 +1648,11 @@ msgstr "" msgid "attribute's name" msgstr "" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" @@ -1693,27 +1701,27 @@ msgstr "" msgid "upload the image file for this product" msgstr "" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1723,39 +1731,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1763,23 +1771,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1789,19 +1797,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1813,59 +1821,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1875,86 +1883,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -1964,144 +1972,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2114,108 +2122,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2225,15 +2233,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2242,59 +2250,51 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "" -#: core/models.py:1851 +#: core/models.py:1848 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2455,11 +2455,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2491,7 +2491,7 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2542,15 +2542,23 @@ msgstr "" msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:312 -msgid "you can only download the digital asset once" +#: core/views.py:309 +msgid "order_product_uuid is required" msgstr "" #: core/views.py:315 +msgid "you can only download the digital asset once" +msgstr "" + +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "" + +#: core/views.py:359 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 " @@ -2558,11 +2566,11 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "" -#: core/views.py:370 +#: core/views.py:376 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2570,14 +2578,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:382 +#: core/views.py:388 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 "" -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2586,7 +2598,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2594,7 +2606,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2604,7 +2616,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2613,7 +2625,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2622,7 +2634,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2630,7 +2642,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2641,7 +2653,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2650,7 +2662,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2660,7 +2672,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2671,7 +2683,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2680,25 +2692,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2709,7 +2721,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2718,12 +2730,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/hr_HR/LC_MESSAGES/django.po b/core/locale/hr_HR/LC_MESSAGES/django.po index 5e5fbc61..9166e031 100644 --- a/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -108,7 +108,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "" @@ -116,11 +116,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "" @@ -128,7 +128,7 @@ msgstr "" msgid "children" msgstr "" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "" @@ -180,7 +180,7 @@ msgstr "" msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" @@ -202,7 +202,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" @@ -414,7 +414,7 @@ msgid "" "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" @@ -682,271 +682,271 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "" @@ -959,11 +959,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "" @@ -972,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "" @@ -992,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "" @@ -1017,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "" @@ -1025,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "" @@ -1033,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "" @@ -1059,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "" @@ -1071,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "" @@ -1111,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "" @@ -1123,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1139,11 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "" @@ -1151,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "" @@ -1236,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1244,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1271,39 +1271,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "" + +#: core/models.py:154 +msgid "integration path" +msgstr "" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1312,42 +1320,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1360,51 +1368,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1412,47 +1420,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1462,67 +1470,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 core/models.py:1644 msgid "associated product" msgstr "" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1534,51 +1542,51 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "" @@ -1640,11 +1648,11 @@ msgstr "" msgid "attribute's name" msgstr "" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" @@ -1693,27 +1701,27 @@ msgstr "" msgid "upload the image file for this product" msgstr "" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1723,39 +1731,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1763,23 +1771,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1789,19 +1797,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1813,59 +1821,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1875,86 +1883,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -1964,144 +1972,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2114,108 +2122,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2225,15 +2233,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2242,59 +2250,51 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "" -#: core/models.py:1851 +#: core/models.py:1848 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2455,11 +2455,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2491,7 +2491,7 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2542,15 +2542,23 @@ msgstr "" msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:312 -msgid "you can only download the digital asset once" +#: core/views.py:309 +msgid "order_product_uuid is required" msgstr "" #: core/views.py:315 +msgid "you can only download the digital asset once" +msgstr "" + +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "" + +#: core/views.py:359 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 " @@ -2558,11 +2566,11 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "" -#: core/views.py:370 +#: core/views.py:376 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2570,14 +2578,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:382 +#: core/views.py:388 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 "" -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2586,7 +2598,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2594,7 +2606,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2604,7 +2616,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2613,7 +2625,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2622,7 +2634,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2630,7 +2642,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2641,7 +2653,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2650,7 +2662,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2660,7 +2672,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2671,7 +2683,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2680,25 +2692,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2709,7 +2721,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2718,12 +2730,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/id_ID/LC_MESSAGES/django.mo b/core/locale/id_ID/LC_MESSAGES/django.mo index 1c324bd28ca3fd24cc48b72444e55bde6f288683..ee1c2cf99c1ba42c97db378637f190b34e18f770 100644 GIT binary patch delta 13065 zcmZwN37pN<|HtujEyD~m%$PBD*Vq}ujGe}eeQWGll4US5VK8Q>$R)C63)z>li-@sg zO@xG!k|he2gh*)-<@b8ubNv4P|HuFP=;L{|?>XP^Ip_Pmcc!^EF6WF1Iep)R<#^L@ zw8>^nF`O1=Oo8miJS?M9V_L)-6OJvhm&cf%n4A3mIAe0*Q4GS*un=Cr!uT8J#Ng`2 z(48rOIWQ8(U@_!8pIJ;IKLu+r0(atEJc$9=r-mIM6%)CD3@kXJWI$MzRQhAQKAc6Ls~aK<+WNt9DZn2i5o3G7|Zm{%Ckhe`NPePe1<-a6ix zb~qmYz%OwN9&cbw9@@QSaV|* zV=43nkl05eFMfpK_&K(tqid+OuHDj@Z!r}b zJ&}A!FJpcs-=McK&ytT#W@FOfv_8hXN&c&T_5ug>XAsH@4q!h~KIsKxUc-bzToC6U z9&Gnc{xs%aYg#AGuFX)?ZhaLsGZV1_PDf4M4p+X%pTZY-Wz&^foW2#WmKf{=cI2X&|e&k6rKVUVC%(P3<0?U(ckEQV?)OkxW z8jrgAd#=3L2xHj4rWqE&aabIeIDNZGsDpD@6SIx9d!P<#6DFaiECuu7dzcFkU_tyC zwRgTnb$knT$3ZW$DKQ+|;2=!EJ=g>vV3?l&#FvbzOhHF1fIbYtIY@;ghR)+`Q-U_9yq zyP_8dVI`c7ari!J$!@yx;-l@rEl@Mo6{D~>>aiZLdd4?XNa%_eq6XaH@;gwQ@MF}S zeunDc5^BoLD|Sx=qwcgI=0Pv&!lGS$7gWE!Q8O{nm5)MSI0X|(Xv!C&rf?l2u+UwaaI z;q*mqwyCb-4b*@uU4A2~!~IwhKgQblE3U>$6Kwlas5L*2HSi8W;Eav=>$eHBf7e#PO&pU5wg9o6w7gP@DC8)SW%TBn+Lz>|ie( zj9+0+Y%*D!o^@|Uq8SCO(&!7Y#!Fa^;iWjV|5I9-F`SVLS0BR)Oka&D8AzI z3$X`P(RQDty$D$WkU~xQz)$j_I#IWhMJ`O9B?}$0jhnj&2 zs3n+(xp9lj@5bij&$#m9Gi-gi8O*<4JXI-BM-5QVWn{3f7g$~S>TdlG9=1KvknNY1%- zii)7t(u>;l6|n%uqGqTmYDPM`@;;~=7=ih5ysMv!>VKuH-)!rBW-kd1a1!+@{mNFD zUr^7x=S{oW3Zpu1ib2=`Bd`amY(~(665V zo+R{m%tvjSZ&6ox4Rys2Q3D1nv};z**%HfAKFH-~V`1{!u?BvI+B-QG*&8f{-N{E| zN1TklCL}JBXo;m3+g&;kz2p~QIPOBN^{1!-E@EZ;17k62iM11ICMG(!pk6o^u^#4F zY9GS{RJ+urJpXYd=2D=Jj$$3Wk1CH_X7eei`en{js4301+C9ZTRvM6`?j63bSzE9TGZ4YN8R~d)Z_99wX366@NEXGqjvu+)Kjq> z^lL?-%4AN;v9t9jKfhKjzJAL8?~ucVkmAzy+HP3LHrao zBR^mj3}3~MXV?hGWAJLb6mMXC^1D!PMBncu5=oR?V^8dj(d1`fIoyMK3a+9~%(K?c zRC6p#el%(=S732GiRJMoCSZYe_J!3E)$bH6gFEmk#y4M+&>a_AZ>O#_>Upk++H5tk zG`7W}I2`pJn28#232I7rV<6r@?V)?9eyhA=-v@QDCHeMP5f@`w#y5vaRHEP}>W&L; zuu~h4ImjoWrnCcw;aJp#%t77BX4H9KVgr1DIkDbGdjW|UK)y8=!VZ`R2Vw-{n~@}f za5|R21y~AqqVDWG=EA^t{a^V_C~B=|qT21pCU_ZhW7$o1Q^sHv`FPY`>WzVzfmLt} z`n0ASNi@Xks9jlUvt6sfsF_)WnzF;F7t0;g<5T86d*^*nn`{c|u?^m0mn;$0Uq4j& zT5OFMP;bI=Tbci85l26=W zmo5o4V?9uNCairI1H4(4BpwG>Rn4X7!swbM>v0&30LAj@i=N3C6f_w9fs zu@e^%jhfPNyX?pBX4DP*h(#D6bT?mS$Vcz9GcyU3$ZznG&=TBt*4%H`Y#6G;x!4~M zVri`S0VgqF5)Q`u2khhf{6YJTXC3CEJli2&LbMP1hz(7CKWdyahuJq6dc@9S9$^UPJZj6sQBzw93t${J#%A~_15L$F<~4K>yKu^@he1L^3Bt55pOn4c-{g4ZZ-dWsJ%j6ThP z*_fd(m>uf(oMF8w-~JVw7dxJ#4kw>ybPwzQ)djvnb3*5fyv3+E@(o{`F!eG&KG8wQ zRW>F0s~AMPpzrNt8F7uNr@Sdf;=~{AZ?%?Px4(R!&({<8IpFqrz~=+oN1OX5Ba_hKWiaL3>F^ZNcn`;Dl^KlV9K!B(`NhPCi4 z>S+o2*IsZWvZf{ptKiERi|btZ1=RZ_*CS>P;~ug8#YwzKft-hxaU0gg%h&)58IQld zi!&3OQ9cKCCl^pNa2@mG9n6cy-mr(-+X7~8N-$&vi@^Pr={3L2A{=`D~4{Bx#=J5ERo|4WO%td)T>O!0PNN9~a zyMh5&ko-%i0cSavq3&oSs)Jpq$Mi$Yhi6gmhaa&V=E-RAS#fxOlygjEy0{rNGe4m^eu%oTupnz`)E(A9?V)BE zi9K9-CTgiCx%^u6X$p6dkVmj3eu3K6#rfYEDsPU}u@h>5$*2oigxW;!qSk!7^8o6G zj-&R;Vu?<5elcBN2LT*c)Z zq1v~>CipV0!4FW6VgC@@{}9xBWjtz+>b#K%jn1^0mjAd{y zR>dpW3PbbT3waKUkROIxl4+=^UW$crAL>)~EOy6xn2POup&rwl#BS84C>mxrQ55RJ z;!smN3ROQ5HAB-;cd`nr;YHLY3@%{LFNRvGXpF}O7=xp+7H&ZG?&Ezxc)ibq`js>|O-U2qWJN?3BAsZT25?0XLx9e~F3sFKX!$3fUQGf?o2SQF~z|YH7w| zD?R^jkMRx6}25jI4htAtdF|T)~Ls;E9$(7u6!5j0*_!>JcD{Q zKR_)-VgA>e9>1EX3ynvgro5di7>nv)4r;AepdQPwQ3Ky`K15AnU~$`VMbrzbDQdI& zPyiOS~I`5qG4r;srUnx6P1yEB}6jf2hmDfY9btBZ24@G@O z%tBqjHkbbewZ`F59{vx)8l(cq9uv4r9J*v@eqt9zYi1e z4r(o{ma%tG8?_{DP@AiZGZS@zb6h^l`ML8BYL5h$wO>%0BRA?ZX(aTWY!r6E3)mjx z%Gs}E6EKGSH>f)bE^prxaj4DO2lav)hT2?{P%oG))QxQU{s)HOA?UYwT<$Gc$oQlujx7ZnLR)q_jT0A@*|fI zkM;O}{;!OQl&9fZ+>B$fOB~O?*63WE$N!6kpz3yj1k|SNhc$2$>fQgHs}HGRFSt6^ zq`bd#33|z&MlI=YSPF~Qv@;lwTB>B!H>))@dH$nGT%kbU=v!|Y zR}qiuuqEn_dZX@eAnF1qp*|b7pgOpL&*NRx5_PL@XJ!Iw30I>w;~l4Y%JvhAjKk+Y z2{q_|^|3ED#^u-wzr(f|6K|j2G0v^nl=5q+$1S>neP8&n8u{}$27?mp3`{}I=xOYR z53rV=|7Q~IH<@Xusk@Dux)KfT9koVnrV*&}WvGshqu%ZJ(1SeY{-abjeo7{^@pP=B ze1lE$gQrcrj*UqEuIIlIneDE@3Fk4&hLFBS%poR_Pr_h2jv)OaF`nS9>c9Iye2e&s zm_*#5t&SwphwxK>PV-G0q9ElueA)TuMdBG(pf!GpbXQ^q=`F;3;!E-eiB5!$y~ww7 z^BvKYi)v2U9)kVof4gb7e?gK zf9F5V7%%B+#BK87w0S_Zb8Xe6G^yN|}TB4{?`tQT_g>8;O#H zj@Jn7{#*o4q$$YBEr^M(o?`#scr~M}y(>G4dIHW9)hXAZKT7(6^3DYBHvci#;{Roo zk~wJep^r*EHV06li`YBpvMXD(m3VFDt_l z&0zYbHHPv;d>8d1(thy&evVI9GnYssUz^5{k3T5W@flX4d^NsLzC7tLA`cNsSsdoV zvRD{*5RZ@LBzXM)dn|ORr?WBsFe+wJ@C)j>J%mRvkl=IVzefP+S6z;e0skMGDZ84` z`=bP9hh6)1Qq*Q^eXfci%I`Qj3PcJ{|V8YbPu8xv59;~jsF*+U%Tn$qhk}5kB>7XS`eLx zVzjA6%%pxS5l(s;@`cIlBL2T)3Wd*7_YL8p{Yckn1Nj<+Zx{t5NjyHjB{7bC3iiUS zu3|FjH%PyywsiCeo+i!P*L+Wek>9U6js)Ve67C40JcZC^pFxZubX3*)|41g1jNbV< zNq>%S5;{J!nBtTdV9>_y#M5}4x;w-fSN4``+uj*M`?{{K3T1nV-9$smd*eXDzyI@6 zu$6`{k=;Q|Cyo&}iT`^%N5QYOjdmTYz6$5_jm>}P8?laBM1EKH?GtUE@z>gaia~2l ziH;_8lAqAAjA%!kpl&0vfb?dp<=WmOA4jBLh2TrA`H8qf#JY}yC~rmlOWaX8P9V0Eeti5%LSMDU z5mSkWu5LKKNrVwo`Tj{2YvTXc{*}vE(w&J+SC))k8s{K%EWj-;{W|%tN#7&-6TcG! zC@W25<6>K53}yK+z+F5^(}#GVgvNgdUZ&CGV;$*qGQEg-u6)YldS?`Mmq@Q6x)a5S z^TeM-uEopDV@D!^3s^+{N8&f)XW|2U|GYA({DuPXA168C3zu$7`U>d-#4kiN zp<|N8|MQ-bAJc9OzJs}3M~_IKB_1EMNnaq25ETjEeQL%ND;~FS4xus!>8CJ=C`6Q@ z(=Sj*9U_YST7T|;{%Pat&rvjrxIw2Aa&Vn1<|c!5|$JU(jDt_XeUPi-F`(KIEa&P22q#tc-KbdrQH}^wEokG zi7MsDPQ@RXkH(`(?;{=M8ms;j()C=v0&P;Cs4L~tD{0q&y81eSqa^8;PqZsa+4saX z%6xyT1;-CWDiKQIPNE_wRUp5|oj8m1lSfm^7rHu?XSvE6xP&<8>L$DL04zkGk%W#G z)aTUt_al);l%sGsvEH4i|J62~bP_hfZNy>fdl0XY?u$Kf0I{5CL%TWn6Xh$hGWkKI zb#%3uJ}M`jjIR)j^!@K`R~dp!U0ReU2GZ!sqa~RLI@VDXKX{_P8R@GopOd;bNdH6h zv(5c~&|Z)9moDFcx15&&xom2ay43F_QWoD-K^QI2>rl$_SZ z0m&m$yveRSYx3#|0THQb87Yr@@1Hs-#SW2eelhby_ z7WI^mEYnVRG0;0SWq5L0a+)_IwO{f;@8Fcdse@7nrrHY~IREW9Pvp+DIM3aHf_5bT Rh5mOq?}(k<>UyT<`VUU@pBMlD delta 12827 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 n#\n" "Language-Team: BRITISH ENGLISH \n" @@ -109,7 +109,7 @@ msgstr "Gambar" msgid "images" msgstr "Gambar" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stok" @@ -117,11 +117,11 @@ msgstr "Stok" msgid "stocks" msgstr "Saham" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Pesan Produk" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Pesan Produk" @@ -129,7 +129,7 @@ msgstr "Pesan Produk" msgid "children" msgstr "Anak-anak" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfigurasi" @@ -181,7 +181,7 @@ msgstr "Momental" msgid "successful" msgstr "Berhasil" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "I/O Cache" @@ -205,7 +205,7 @@ msgstr "Dapatkan parameter aplikasi yang dapat diekspos" msgid "send a message to the support team" msgstr "Kirim pesan ke tim dukungan" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Meminta URL CORSed. Hanya https yang diizinkan." @@ -455,7 +455,7 @@ msgstr "" "diselesaikan menggunakan saldo pengguna; Jika `force_payment` digunakan, " "transaksi dimulai." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "membeli pesanan tanpa pembuatan akun" @@ -757,273 +757,273 @@ msgstr "menghapus relasi pesanan-produk" msgid "add or remove feedback on an order–product relation" msgstr "menambah atau menghapus umpan balik pada relasi pesanan-produk" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Tidak ada istilah pencarian yang disediakan." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Pencarian" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Nama" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategori" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategori Siput" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Harga Min" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Harga Maksimal" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Aktif" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Merek" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Atribut" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Kuantitas" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Siput" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Apakah Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Sertakan sub-kategori" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Menyertakan produk pesanan pribadi" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "Harus ada category_uuid untuk menggunakan flag include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Pencarian (ID, nama produk atau nomor komponen)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Dibeli setelah (inklusif)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Membeli sebelumnya (inklusif)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Email pengguna" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID Pengguna" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "ID yang Dapat Dibaca Manusia" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Orang tua" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Seluruh kategori (memiliki setidaknya 1 produk atau tidak)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Tingkat" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID Produk" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Kunci yang harus dicari di dalam atau diatur ke dalam cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data yang akan disimpan dalam cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Batas waktu dalam detik untuk mengatur data ke dalam cache" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Data yang di-cache" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Data JSON yang di-camel dari URL yang diminta" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Hanya URL yang dimulai dengan http(s):// yang diperbolehkan" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Menambahkan produk ke pesanan" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pesanan {order_uuid} tidak ditemukan!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Menghapus produk dari pesanan" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Hapus semua produk dari pesanan" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Beli pesanan" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Harap berikan order_uuid atau order_hr_id - tidak boleh lebih dari satu!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Tipe yang salah berasal dari metode order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Melakukan tindakan pada daftar produk dalam pesanan" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Hapus/Tambah" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Tindakan harus berupa \"tambah\" atau \"hapus\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Melakukan tindakan pada daftar produk dalam daftar keinginan" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Berikan nilai `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} tidak ditemukan!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Menambahkan produk ke pesanan" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Menghapus produk dari pesanan" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Menghapus produk dari pesanan" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Menghapus produk dari pesanan" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Beli pesanan" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Kirimkan atribut dalam bentuk string seperti attr1 = nilai1, attr2 = nilai2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Menambah atau menghapus umpan balik untuk pesananproduk" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Tindakan harus berupa `menambahkan` atau `menghapus`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} tidak ditemukan!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "String alamat asli yang diberikan oleh pengguna" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Batas harus antara 1 dan 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bekerja dengan sangat baik" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Atribut" @@ -1036,11 +1036,11 @@ msgid "groups of attributes" msgstr "Kelompok atribut" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategori" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Merek" @@ -1049,7 +1049,7 @@ msgid "category image url" msgstr "Kategori" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Persentase Markup" @@ -1072,7 +1072,7 @@ msgstr "Tag untuk kategori ini" msgid "products in this category" msgstr "Produk dalam kategori ini" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Vendor" @@ -1098,7 +1098,7 @@ msgid "represents feedback from a user." msgstr "Merupakan umpan balik dari pengguna." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Pemberitahuan" @@ -1106,7 +1106,7 @@ msgstr "Pemberitahuan" msgid "download url for this order product if applicable" msgstr "Unduh url untuk produk pesanan ini jika ada" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Umpan balik" @@ -1114,7 +1114,7 @@ msgstr "Umpan balik" msgid "a list of order products in this order" msgstr "Daftar produk pesanan dalam urutan ini" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Alamat penagihan" @@ -1142,7 +1142,7 @@ msgstr "Apakah semua produk dalam pesanan digital" msgid "transactions for this order" msgstr "Transaksi untuk pesanan ini" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Pesanan" @@ -1154,19 +1154,19 @@ msgstr "URL gambar" msgid "product's images" msgstr "Gambar produk" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Umpan balik" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Merek" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Kelompok atribut" @@ -1194,7 +1194,7 @@ msgstr "Jumlah umpan balik" msgid "only available for personal orders" msgstr "Produk hanya tersedia untuk pesanan pribadi" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produk" @@ -1206,15 +1206,15 @@ msgstr "Kode promosi" msgid "products on sale" msgstr "Produk yang dijual" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promosi" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1222,11 +1222,11 @@ msgstr "Vendor" msgid "product" msgstr "Produk" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produk yang diinginkan" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Daftar keinginan" @@ -1234,7 +1234,7 @@ msgstr "Daftar keinginan" msgid "tagged products" msgstr "Produk yang ditandai" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Label produk" @@ -1321,7 +1321,7 @@ msgstr "Hasil pencarian produk" msgid "posts search results" msgstr "Hasil pencarian produk" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1334,23 +1334,23 @@ msgstr "" " mengkategorikan dan mengelola atribut secara lebih efektif dalam sistem " "yang kompleks." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Induk dari grup ini" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Grup atribut induk" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Nama grup atribut" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Kelompok atribut" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1369,41 +1369,49 @@ msgstr "" "sehingga cocok untuk digunakan dalam sistem yang berinteraksi dengan vendor " "pihak ketiga." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Menyimpan kredensial dan titik akhir yang diperlukan untuk komunikasi API " "vendor" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Info otentikasi" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Tentukan markup untuk produk yang diambil dari vendor ini" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Persentase markup vendor" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Nama vendor ini" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Nama vendor" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "file tanggapan" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "tanggapan pemrosesan terakhir dari vendor" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Jalur file integrasi vendor" + +#: core/models.py:154 +msgid "integration path" +msgstr "Jalur integrasi" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1418,27 +1426,27 @@ msgstr "" " yang diekspor melalui mixin dan menyediakan penyesuaian metadata untuk " "tujuan administratif." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Pengidentifikasi tag internal untuk tag produk" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Nama tag" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Nama yang mudah digunakan untuk label produk" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Nama tampilan tag" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Label produk" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1449,15 +1457,15 @@ msgstr "" "produk. Kelas ini mencakup atribut untuk pengenal tag internal dan nama " "tampilan yang mudah digunakan." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "tag kategori" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "tag kategori" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1479,51 +1487,51 @@ msgstr "" "menentukan nama, deskripsi, dan hierarki kategori, serta menetapkan atribut " "seperti gambar, tag, atau prioritas." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Unggah gambar yang mewakili kategori ini" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Kategori gambar" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Tentukan persentase markup untuk produk dalam kategori ini" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Induk dari kategori ini untuk membentuk struktur hirarki" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Kategori induk" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Nama kategori" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Berikan nama untuk kategori ini" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Tambahkan deskripsi terperinci untuk kategori ini" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Deskripsi kategori" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tag yang membantu mendeskripsikan atau mengelompokkan kategori ini" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioritas" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1536,47 +1544,47 @@ msgstr "" "terkait, siput unik, dan urutan prioritas. Kelas ini memungkinkan pengaturan" " dan representasi data yang terkait dengan merek di dalam aplikasi." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Nama merek ini" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Nama merek" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Unggah logo yang mewakili merek ini" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Merek gambar kecil" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Unggah logo besar yang mewakili merek ini" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Citra besar merek" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Tambahkan deskripsi terperinci tentang merek" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Deskripsi merek" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Kategori opsional yang dikaitkan dengan merek ini" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategori" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1592,68 +1600,68 @@ msgstr "" "untuk memungkinkan pelacakan dan evaluasi produk yang tersedia dari berbagai" " vendor." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Vendor yang memasok stok produk ini" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Vendor terkait" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Harga akhir kepada pelanggan setelah markup" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Harga jual" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Produk yang terkait dengan entri saham ini" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Produk terkait" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Harga yang dibayarkan kepada vendor untuk produk ini" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Harga pembelian vendor" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Jumlah produk yang tersedia dalam stok" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Jumlah dalam stok" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU yang ditetapkan vendor untuk mengidentifikasi produk" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU Vendor" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "File digital yang terkait dengan saham ini jika ada" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "File digital" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Entri saham" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1674,51 +1682,51 @@ msgstr "" "ini digunakan untuk mendefinisikan dan memanipulasi data produk dan " "informasi terkait di dalam aplikasi." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Kategori produk ini termasuk dalam" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Secara opsional mengaitkan produk ini dengan merek" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tag yang membantu mendeskripsikan atau mengelompokkan produk ini" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Menunjukkan apakah produk ini dikirimkan secara digital" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Apakah produk digital" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Berikan nama pengenal yang jelas untuk produk" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Nama produk" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Menambahkan deskripsi rinci tentang produk" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Deskripsi produk" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Nomor komponen untuk produk ini" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Nomor bagian" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Unit Penyimpanan Stok untuk produk ini" @@ -1786,11 +1794,11 @@ msgstr "Nama atribut ini" msgid "attribute's name" msgstr "Nama atribut" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "dapat disaring" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Atribut dan nilai mana yang dapat digunakan untuk memfilter kategori ini." @@ -1848,27 +1856,27 @@ msgstr "Teks alt gambar" msgid "upload the image file for this product" msgstr "Unggah file gambar untuk produk ini" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Gambar produk" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Menentukan urutan gambar yang ditampilkan" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Prioritas tampilan" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Produk yang diwakili oleh gambar ini" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Gambar produk" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1884,39 +1892,39 @@ msgstr "" "produk yang berlaku. Kelas ini terintegrasi dengan katalog produk untuk " "menentukan item yang terpengaruh dalam kampanye." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Persentase diskon untuk produk yang dipilih" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Persentase diskon" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Berikan nama unik untuk promosi ini" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Nama promosi" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Deskripsi promosi" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Pilih produk mana yang termasuk dalam promosi ini" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Produk yang disertakan" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promosi" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1929,23 +1937,23 @@ msgstr "" "serta mendukung operasi untuk menambah dan menghapus beberapa produk " "sekaligus." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produk yang telah ditandai pengguna sebagai yang diinginkan" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Pengguna yang memiliki daftar keinginan ini" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Pemilik Wishlist" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Daftar keinginan" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1961,19 +1969,19 @@ msgstr "" "untuk file dokumenter. Kelas ini memperluas fungsionalitas dari mixin " "tertentu dan menyediakan fitur khusus tambahan." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Dokumenter" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Dokumenter" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Belum terselesaikan" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1994,59 +2002,59 @@ msgstr "" "memungkinkan untuk mengasosiasikan alamat dengan pengguna, sehingga " "memudahkan penanganan data yang dipersonalisasi." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Baris alamat untuk pelanggan" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Baris alamat" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Jalan" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Distrik" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Kota" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Wilayah" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Kode pos" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Negara" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Titik Geolokasi (Bujur, Lintang)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Tanggapan JSON lengkap dari geocoder untuk alamat ini" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Respons JSON yang tersimpan dari layanan geocoding" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Alamat" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Alamat" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2062,72 +2070,72 @@ msgstr "" "penggunaannya. Ini termasuk fungsionalitas untuk memvalidasi dan menerapkan " "kode promo ke pesanan sambil memastikan batasan terpenuhi." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Kode unik yang digunakan oleh pengguna untuk menukarkan diskon" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Pengenal kode promo" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Jumlah diskon tetap berlaku jika persen tidak digunakan" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Jumlah diskon tetap" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Persentase diskon diterapkan jika jumlah tetap tidak digunakan" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Persentase diskon" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Cap waktu saat kode promo berakhir" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Akhiri waktu validitas" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Stempel waktu dari mana kode promo ini valid" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Mulai waktu validitas" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Stempel waktu ketika promocode digunakan, kosongkan jika belum digunakan" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Cap waktu penggunaan" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Pengguna yang ditugaskan ke kode promo ini jika berlaku" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Pengguna yang ditugaskan" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Kode promo" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Kode promo" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2135,16 +2143,16 @@ msgstr "" "Hanya satu jenis diskon yang harus ditentukan (jumlah atau persen), tetapi " "tidak boleh keduanya atau tidak sama sekali." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promocode telah digunakan" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Jenis diskon tidak valid untuk kode promo {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2161,144 +2169,144 @@ msgstr "" "Fungsionalitas yang sama juga mendukung pengelolaan produk dalam siklus " "hidup pesanan." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Alamat penagihan yang digunakan untuk pesanan ini" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Kode promo opsional berlaku untuk pesanan ini" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Kode promo yang diterapkan" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Alamat pengiriman yang digunakan untuk pesanan ini" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Alamat pengiriman" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Status pesanan saat ini dalam siklus hidupnya" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Status pesanan" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Struktur JSON dari notifikasi untuk ditampilkan kepada pengguna, di UI admin" " digunakan table-view" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Representasi JSON dari atribut pesanan untuk pesanan ini" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Pengguna yang melakukan pemesanan" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Pengguna" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Stempel waktu saat pesanan diselesaikan" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Beli waktu" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Pengenal yang dapat dibaca manusia untuk pesanan" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID yang dapat dibaca manusia" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Pesan" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" "Seorang pengguna hanya boleh memiliki satu pending order dalam satu waktu!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Anda tidak dapat menambahkan produk ke pesanan yang bukan merupakan pesanan " "yang tertunda" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Anda tidak dapat menambahkan produk yang tidak aktif ke dalam pesanan" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" "Anda tidak dapat menambahkan lebih banyak produk daripada yang tersedia " "dalam stok" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Anda tidak dapat menghapus produk dari pesanan yang bukan merupakan pesanan " "yang tertunda" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} tidak ada dengan kueri <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Kode promosi tidak ada" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Anda hanya dapat membeli produk fisik dengan alamat pengiriman yang " "ditentukan!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Alamat tidak ada" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Anda tidak dapat membeli saat ini, silakan coba lagi dalam beberapa menit." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Nilai gaya tidak valid" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Anda tidak dapat membeli pesanan kosong!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Anda tidak dapat membeli pesanan tanpa pengguna!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Pengguna tanpa saldo tidak dapat membeli dengan saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Dana tidak mencukupi untuk menyelesaikan pesanan" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2306,7 +2314,7 @@ msgstr "" "Anda tidak dapat membeli tanpa registrasi, berikan informasi berikut: nama " "pelanggan, email pelanggan, nomor telepon pelanggan" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2314,7 +2322,7 @@ msgstr "" "Metode pembayaran tidak valid: {payment_method} dari " "{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2336,110 +2344,110 @@ msgstr "" "URL unduhan untuk produk digital. Model ini terintegrasi dengan model " "Pesanan dan Produk dan menyimpan referensi ke keduanya." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Harga yang dibayarkan oleh pelanggan untuk produk ini pada saat pembelian" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Harga pembelian pada saat pemesanan" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Komentar internal untuk admin tentang produk yang dipesan ini" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Komentar internal" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Pemberitahuan pengguna" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Representasi JSON dari atribut item ini" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Atribut produk yang dipesan" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Referensi ke pesanan induk yang berisi produk ini" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Urutan induk" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Produk spesifik yang terkait dengan baris pesanan ini" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Jumlah produk spesifik ini dalam pesanan" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Kuantitas produk" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Status saat ini dari produk ini dalam pesanan" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status lini produk" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Pesananproduk harus memiliki pesanan terkait!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Tindakan yang salah ditentukan untuk umpan balik: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" "Anda tidak dapat memberikan umpan balik atas pesanan yang tidak diterima" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Nama" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL integrasi" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Kredensial otentikasi" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Anda hanya dapat memiliki satu penyedia CRM default" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Tautan CRM pesanan" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Tautan CRM Pesanan" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2456,15 +2464,15 @@ msgstr "" "untuk menghasilkan URL untuk mengunduh aset ketika pesanan terkait dalam " "status selesai." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Unduh" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Unduhan" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2479,63 +2487,55 @@ msgstr "" "ditetapkan pengguna. Kelas ini menggunakan bidang basis data untuk " "memodelkan dan mengelola data umpan balik secara efektif." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" "Komentar yang diberikan pengguna tentang pengalaman mereka dengan produk" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Komentar umpan balik" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "Merujuk ke produk tertentu sesuai dengan urutan umpan balik ini" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Produk pesanan terkait" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Peringkat yang ditetapkan pengguna untuk produk" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Peringkat produk" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Anda harus memberikan komentar, penilaian, dan memesan produk uuid untuk " "menambahkan umpan balik." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Kesalahan selama pembuatan promocode: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Beranda" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Hubungi Kami" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Tentang Kami" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Informasi Pembayaran" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Pengiriman" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2711,11 +2711,11 @@ msgstr "" "Semua hak cipta\n" " dilindungi undang-undang" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Data dan batas waktu diperlukan" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Nilai batas waktu tidak valid, harus antara 0 dan 216000 detik" @@ -2747,7 +2747,7 @@ msgstr "Anda tidak memiliki izin untuk melakukan tindakan ini." msgid "NOMINATIM_URL must be configured." msgstr "Parameter NOMINATIM_URL harus dikonfigurasi!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2808,15 +2808,23 @@ msgstr "Menangani kueri penelusuran global." msgid "Handles the logic of buying as a business without registration." msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid diperlukan" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Anda hanya dapat mengunduh aset digital sekali saja" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "pesanan harus dibayar sebelum mengunduh aset digital" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Produk pesanan tidak memiliki produk" + +#: core/views.py:359 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." @@ -2824,11 +2832,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon tidak ditemukan" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2836,7 +2844,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2847,7 +2855,11 @@ msgstr "" "admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk " "menangani pengalihan HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Mengembalikan versi eVibes saat ini." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2861,7 +2873,7 @@ msgstr "" "dukungan untuk kelas serializer dinamis berdasarkan tindakan saat ini, izin " "yang dapat disesuaikan, dan format rendering." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2875,7 +2887,7 @@ msgstr "" "API aplikasi dan menyediakan cara standar untuk memproses permintaan dan " "respons untuk data AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2891,7 +2903,7 @@ msgstr "" "seperti pemfilteran berdasarkan bidang tertentu atau mengambil informasi " "yang terperinci versus yang disederhanakan tergantung pada permintaan." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2905,7 +2917,7 @@ msgstr "" "Django REST Framework dan menggunakan serializer yang sesuai untuk tindakan " "yang berbeda. Kemampuan pemfilteran disediakan melalui DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2919,7 +2931,7 @@ msgstr "" " data kategori. ViewSet juga memberlakukan izin untuk memastikan bahwa hanya" " pengguna yang memiliki izin yang dapat mengakses data tertentu." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2931,7 +2943,7 @@ msgstr "" "serialisasi objek Brand. Kelas ini menggunakan kerangka kerja ViewSet Django" " untuk menyederhanakan implementasi titik akhir API untuk objek Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2949,7 +2961,7 @@ msgstr "" " untuk mengambil detail produk, menerapkan izin, dan mengakses umpan balik " "terkait produk." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2964,7 +2976,7 @@ msgstr "" "adalah untuk menyediakan akses yang efisien ke sumber daya yang berhubungan " "dengan Vendor melalui kerangka kerja Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2981,7 +2993,7 @@ msgstr "" "yang dapat diakses. Kelas ini memperluas `EvibesViewSet` dasar dan " "menggunakan sistem penyaringan Django untuk meminta data." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3000,7 +3012,7 @@ msgstr "" "beberapa serializer berdasarkan tindakan spesifik yang dilakukan dan " "memberlakukan izin yang sesuai saat berinteraksi dengan data pesanan." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3014,11 +3026,11 @@ msgstr "" "serializer berdasarkan tindakan yang diminta. Selain itu, ini menyediakan " "tindakan terperinci untuk menangani umpan balik pada instance OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Mengelola operasi yang terkait dengan gambar Produk dalam aplikasi." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3026,15 +3038,15 @@ msgstr "" "Mengelola pengambilan dan penanganan contoh PromoCode melalui berbagai " "tindakan API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Merupakan set tampilan untuk mengelola promosi." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Menangani operasi yang terkait dengan data Stok di dalam sistem." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3052,7 +3064,7 @@ msgstr "" "diintegrasikan untuk memastikan bahwa pengguna hanya dapat mengelola daftar " "keinginan mereka sendiri kecuali jika izin eksplisit diberikan." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3066,12 +3078,12 @@ msgstr "" "khusus untuk metode HTTP yang berbeda, penggantian serializer, dan " "penanganan izin berdasarkan konteks permintaan." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Kesalahan pengodean geografis: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo index 2d1397b141a59051461e8aab22419c5fe4c65e26..9bae63fcd061e5c4d65c2de57d6b24478a64b8e6 100644 GIT binary patch delta 13098 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 diff --git a/core/locale/it_IT/LC_MESSAGES/django.po b/core/locale/it_IT/LC_MESSAGES/django.po index cc9295ad..9143e2c7 100644 --- a/core/locale/it_IT/LC_MESSAGES/django.po +++ b/core/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Immagine" msgid "images" msgstr "Immagini" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stock" @@ -118,11 +118,11 @@ msgstr "Stock" msgid "stocks" msgstr "Le scorte" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Ordina il prodotto" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Ordinare i prodotti" @@ -130,7 +130,7 @@ msgstr "Ordinare i prodotti" msgid "children" msgstr "I bambini" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Configurazione" @@ -182,7 +182,7 @@ msgstr "Momentale" msgid "successful" msgstr "Successo" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "I/O della cache" @@ -206,7 +206,7 @@ msgstr "Ottenere i parametri esponibili dell'applicazione" msgid "send a message to the support team" msgstr "Inviate un messaggio al team di assistenza" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Richiedere un URL CORSed. È consentito solo https." @@ -454,7 +454,7 @@ msgstr "" "l'acquisto viene completato utilizzando il saldo dell'utente; se si utilizza" " `forza_pagamento`, viene avviata una transazione." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "acquistare un ordine senza creare un account" @@ -756,234 +756,234 @@ msgstr "eliminare una relazione ordine-prodotto" msgid "add or remove feedback on an order–product relation" msgstr "aggiungere o rimuovere un feedback su una relazione ordine-prodotto" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Ricerca" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Nome" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Categorie" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Categorie Lumache" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tag" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Prezzo minimo" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Max Price" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "È attivo" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Marchio" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Attributi" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Quantità" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Lumaca" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "È digitale" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Includere le sottocategorie" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Includere prodotti ordinati personalmente" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Deve esserci una categoria_uuid per utilizzare il flag include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Ricerca (ID, nome del prodotto o numero di parte)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Acquistato dopo (incluso)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Acquistato prima (compreso)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Email dell'utente" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID utente" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Stato" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "ID leggibile dall'uomo" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Genitore" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Intera categoria (con o senza almeno 1 prodotto)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Livello" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID del prodotto" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Chiave da cercare o da inserire nella cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data to store in cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout in secondi per l'inserimento dei dati nella cache" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Dati in cache" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Dati JSON camelizzati dall'URL richiesto" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Aggiungere un prodotto all'ordine" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordine {order_uuid} non trovato!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Rimuovere tutti i prodotti dall'ordine" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Acquistare un ordine" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Eseguire un'azione su un elenco di prodotti nell'ordine" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Rimuovi/Aggiungi" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "L'azione deve essere \"aggiungere\" o \"rimuovere\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Eseguire un'azione su un elenco di prodotti nella wishlist" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Fornire il valore `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista dei desideri {wishlist_uuid} non trovata!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Aggiungere un prodotto all'ordine" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Rimuovere un prodotto dall'ordine" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Acquistare un ordine" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -991,41 +991,41 @@ msgstr "" "Inviare gli attributi come stringa formattata come " "attr1=valore1,attr2=valore2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Aggiungere o eliminare un feedback per l'ordine-prodotto" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "L'azione deve essere `add` o `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Prodotto dell'ordine {order_product_uuid} non trovato!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Stringa di indirizzo originale fornita dall'utente" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Il limite deve essere compreso tra 1 e 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch: funziona a meraviglia" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Attributi" @@ -1038,11 +1038,11 @@ msgid "groups of attributes" msgstr "Gruppi di attributi" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Categorie" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Marche" @@ -1051,7 +1051,7 @@ msgid "category image url" msgstr "Categorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Percentuale di markup" @@ -1075,7 +1075,7 @@ msgstr "Tag per questa categoria" msgid "products in this category" msgstr "Prodotti in questa categoria" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Venditori" @@ -1100,7 +1100,7 @@ msgid "represents feedback from a user." msgstr "Rappresenta il feedback di un utente." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Notifiche" @@ -1108,7 +1108,7 @@ msgstr "Notifiche" msgid "download url for this order product if applicable" msgstr "URL di download per il prodotto dell'ordine, se applicabile" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Feedback" @@ -1116,7 +1116,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Un elenco di prodotti ordinati in questo ordine" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Indirizzo di fatturazione" @@ -1144,7 +1144,7 @@ msgstr "Tutti i prodotti sono presenti nell'ordine digitale" msgid "transactions for this order" msgstr "Transazioni per questo ordine" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Ordini" @@ -1156,19 +1156,19 @@ msgstr "URL immagine" msgid "product's images" msgstr "Immagini del prodotto" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Feedback" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Marchio" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Gruppi di attributi" @@ -1196,7 +1196,7 @@ msgstr "Numero di feedback" msgid "only available for personal orders" msgstr "Prodotti disponibili solo per ordini personali" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Prodotti" @@ -1208,15 +1208,15 @@ msgstr "Codici promozionali" msgid "products on sale" msgstr "Prodotti in vendita" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promozioni" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Venditore" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1224,11 +1224,11 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Liste dei desideri" @@ -1236,7 +1236,7 @@ msgstr "Liste dei desideri" msgid "tagged products" msgstr "Prodotti contrassegnati" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Tag del prodotto" @@ -1322,7 +1322,7 @@ msgstr "Risultati della ricerca dei prodotti" msgid "posts search results" msgstr "Risultati della ricerca dei prodotti" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1335,23 +1335,23 @@ msgstr "" "Questo può essere utile per categorizzare e gestire meglio gli attributi in " "un sistema complesso." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Genitore di questo gruppo" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Gruppo di attributi padre" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Nome del gruppo di attributi" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Gruppo di attributi" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1370,41 +1370,49 @@ msgstr "" "anche metadati e vincoli aggiuntivi, rendendolo adatto all'uso in sistemi " "che interagiscono con venditori terzi." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Memorizza le credenziali e gli endpoint necessari per la comunicazione API " "del fornitore." -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Informazioni sull'autenticazione" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Definire il markup per i prodotti recuperati da questo fornitore" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Percentuale di ricarico del fornitore" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Nome del fornitore" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Nome del fornitore" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "file di risposta" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "risposta del venditore all'ultima elaborazione" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Percorso del file di integrazione del fornitore" + +#: core/models.py:154 +msgid "integration path" +msgstr "Percorso di integrazione" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1419,27 +1427,27 @@ msgstr "" "operazioni esportate attraverso i mixin e fornisce la personalizzazione dei " "metadati per scopi amministrativi." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Identificatore interno dell'etichetta del prodotto" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Nome del tag" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Nome intuitivo per l'etichetta del prodotto" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Nome del tag" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Etichetta del prodotto" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1450,15 +1458,15 @@ msgstr "" "classificare i prodotti. Include gli attributi per un identificatore interno" " del tag e un nome di visualizzazione facile da usare." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "tag categoria" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "tag di categoria" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1481,52 +1489,52 @@ msgstr "" "specificare il nome, la descrizione e la gerarchia delle categorie, nonché " "di assegnare attributi come immagini, tag o priorità." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Caricare un'immagine che rappresenti questa categoria" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Categoria immagine" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" "Definire una percentuale di ricarico per i prodotti di questa categoria" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Genitore di questa categoria per formare una struttura gerarchica" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Categoria di genitori" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Nome della categoria" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Indicare un nome per questa categoria" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Aggiungere una descrizione dettagliata per questa categoria" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Descrizione della categoria" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tag che aiutano a descrivere o raggruppare questa categoria" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Priorità" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1540,47 +1548,47 @@ msgstr "" "priorità. Permette di organizzare e rappresentare i dati relativi al marchio" " all'interno dell'applicazione." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Nome del marchio" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Nome del marchio" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Caricare un logo che rappresenti questo marchio" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Immagine piccola del marchio" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Caricare un grande logo che rappresenti questo marchio" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Grande immagine del marchio" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Aggiungere una descrizione dettagliata del marchio" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Descrizione del marchio" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Categorie opzionali a cui questo marchio è associato" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Categorie" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1596,68 +1604,68 @@ msgstr "" "dell'inventario per consentire il monitoraggio e la valutazione dei prodotti" " disponibili presso i vari fornitori." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Venditore associato" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Prezzo di vendita" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Prodotto associato" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU del venditore" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "File digitale" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Voci di magazzino" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1679,51 +1687,51 @@ msgstr "" " dei prodotti e le informazioni ad essi associate all'interno di " "un'applicazione." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Categoria a cui appartiene questo prodotto" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Associare facoltativamente questo prodotto a un marchio" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Indica se il prodotto è consegnato in formato digitale" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Il prodotto è digitale" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Fornire un nome identificativo chiaro per il prodotto" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Nome del prodotto" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Descrizione del prodotto" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Numero di parte per questo prodotto" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Numero di parte" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Unità di mantenimento delle scorte per questo prodotto" @@ -1791,11 +1799,11 @@ msgstr "Nome dell'attributo" msgid "attribute's name" msgstr "Nome dell'attributo" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "è filtrabile" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quali attributi e valori possono essere utilizzati per filtrare questa " @@ -1856,27 +1864,27 @@ msgstr "Testo alt dell'immagine" msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Immagine del prodotto" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Priorità del display" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Immagini del prodotto" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1892,39 +1900,39 @@ msgstr "" "collegarla ai prodotti applicabili. Si integra con il catalogo dei prodotti " "per determinare gli articoli interessati dalla campagna." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Percentuale di sconto" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Nome della promozione" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Descrizione della promozione" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Prodotti inclusi" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promozione" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1937,23 +1945,23 @@ msgstr "" "rimozione di prodotti, nonché operazioni per l'aggiunta e la rimozione di " "più prodotti contemporaneamente." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Lista dei desideri" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1969,19 +1977,19 @@ msgstr "" "file documentari. Estende le funzionalità di mixin specifici e fornisce " "ulteriori caratteristiche personalizzate." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documentario" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentari" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Non risolto" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2003,59 +2011,59 @@ msgstr "" "classe consente inoltre di associare un indirizzo a un utente, facilitando " "la gestione personalizzata dei dati." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Indirizzo del cliente" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Linea di indirizzo" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Via" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Distretto" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Città" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Regione" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Codice postale" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Paese" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Punto di geolocalizzazione(Longitudine, Latitudine)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Risposta JSON completa di geocoder per questo indirizzo" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Risposta JSON memorizzata dal servizio di geocodifica" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Indirizzo" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Indirizzi" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2072,74 +2080,74 @@ msgstr "" "utilizzo. Include funzionalità per convalidare e applicare il codice " "promozionale a un ordine, assicurando il rispetto dei vincoli." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Codice univoco utilizzato da un utente per riscattare uno sconto" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" "Importo fisso dello sconto applicato se non si utilizza la percentuale" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Sconto percentuale" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Tempo di validità finale" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Ora di inizio validità" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Timestamp in cui è stato utilizzato il codice promozionale, vuoto se non " "ancora utilizzato" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Utente assegnato" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Codice promozionale" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Codici promozionali" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2147,16 +2155,16 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo di sconto non valido per il codice promozionale {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2174,139 +2182,139 @@ msgstr "" "funzionalità supporta la gestione dei prodotti nel ciclo di vita " "dell'ordine." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "L'indirizzo di fatturazione utilizzato per questo ordine" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Codice promozionale opzionale applicato a questo ordine" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Codice promozionale applicato" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "L'indirizzo di spedizione utilizzato per questo ordine" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Indirizzo di spedizione" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Stato attuale dell'ordine nel suo ciclo di vita" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Stato dell'ordine" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Struttura JSON delle notifiche da mostrare agli utenti; nell'interfaccia " "utente dell'amministratore viene utilizzata la visualizzazione a tabella." -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Rappresentazione JSON degli attributi dell'ordine per questo ordine" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "L'utente che ha effettuato l'ordine" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Utente" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Il timestamp del momento in cui l'ordine è stato finalizzato" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Acquista tempo" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Un identificatore leggibile dall'uomo per l'ordine" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID leggibile dall'uomo" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Ordine" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Un utente può avere un solo ordine pendente alla volta!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Non è possibile aggiungere prodotti a un ordine che non sia in sospeso." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "Non è possibile rimuovere i prodotti da un ordine che non è in corso." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "È possibile acquistare solo prodotti fisici con indirizzo di spedizione " "specificato!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "L'indirizzo non esiste" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "In questo momento non è possibile acquistare, riprovare tra qualche minuto." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Valore di forza non valido" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Non è possibile acquistare un ordine senza un utente!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Un utente senza saldo non può acquistare con il saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2315,7 +2323,7 @@ msgstr "" "seguenti informazioni: nome del cliente, e-mail del cliente, numero di " "telefono del cliente" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2323,7 +2331,7 @@ msgstr "" "Metodo di pagamento non valido: {payment_method} da " "{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2346,109 +2354,109 @@ msgstr "" "modello si integra con i modelli Ordine e Prodotto e memorizza un " "riferimento ad essi." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" "Il prezzo pagato dal cliente per questo prodotto al momento dell'acquisto." -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Commenti interni" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Notifiche degli utenti" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Ordine dei genitori" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Quantità di prodotto" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Stato della linea di prodotti" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "L'ordine-prodotto deve avere un ordine associato!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Azione errata specificata per il feedback: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "non è possibile dare un riscontro a un ordine non ricevuto" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Nome" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL dell'integrazione" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Credenziali di autenticazione" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "È possibile avere un solo provider CRM predefinito" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Link al CRM dell'ordine" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Link al CRM degli ordini" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2465,15 +2473,15 @@ msgstr "" "il download della risorsa quando l'ordine associato è in uno stato " "completato." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Scaricare" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Scaricamento" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2488,63 +2496,55 @@ msgstr "" "assegnata dall'utente. La classe utilizza campi del database per modellare e" " gestire efficacemente i dati di feedback." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Commenti degli utenti sulla loro esperienza con il prodotto" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Commenti di feedback" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Riferisce il prodotto specifico in un ordine di cui si tratta il feedback." -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Prodotto correlato all'ordine" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Valutazione del prodotto assegnata dall'utente" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Valutazione del prodotto" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "per aggiungere un feedback è necessario fornire un commento, una valutazione" " e l'uuid del prodotto dell'ordine." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Errore durante la creazione del codice promozionale: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Casa" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Contatto" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Chi siamo" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Informazioni sul pagamento" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Consegna" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2720,11 +2720,11 @@ msgstr "" "tutti i diritti\n" " riservato" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Sono richiesti sia i dati che il timeout" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Valore di timeout non valido, deve essere compreso tra 0 e 216000 secondi." @@ -2757,7 +2757,7 @@ msgstr "Non si ha il permesso di eseguire questa azione." msgid "NOMINATIM_URL must be configured." msgstr "Il parametro NOMINATIM_URL deve essere configurato!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2821,15 +2821,23 @@ msgstr "Gestisce le query di ricerca globali." msgid "Handles the logic of buying as a business without registration." msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid è obbligatorio" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "È possibile scaricare l'asset digitale una sola volta" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "l'ordine deve essere pagato prima di scaricare il bene digitale" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Il prodotto dell'ordine non ha un prodotto" + +#: core/views.py:359 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." @@ -2837,11 +2845,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon non trovata" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2849,7 +2857,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2860,7 +2868,11 @@ msgstr "" "indice dell'interfaccia di amministrazione di Django. Utilizza la funzione " "`redirect` di Django per gestire il reindirizzamento HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Restituisce la versione corrente di eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2874,7 +2886,7 @@ msgstr "" "Include il supporto per classi di serializzatori dinamici in base all'azione" " corrente, permessi personalizzabili e formati di rendering." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2888,7 +2900,7 @@ msgstr "" "parte del livello API dell'applicazione e fornisce un modo standardizzato " "per elaborare le richieste e le risposte per i dati di AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2904,7 +2916,7 @@ msgstr "" "sui dati restituiti, come il filtraggio per campi specifici o il recupero di" " informazioni dettagliate o semplificate, a seconda della richiesta." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2919,7 +2931,7 @@ msgstr "" "per le diverse azioni. Le funzionalità di filtraggio sono fornite da " "DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2934,7 +2946,7 @@ msgstr "" "le autorizzazioni per garantire che solo gli utenti autorizzati possano " "accedere a dati specifici." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2946,7 +2958,7 @@ msgstr "" " gli oggetti Brand. Utilizza il framework ViewSet di Django per semplificare" " l'implementazione di endpoint API per gli oggetti Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2964,7 +2976,7 @@ msgstr "" "Include metodi per recuperare i dettagli del prodotto, applicare i permessi " "e accedere ai feedback correlati di un prodotto." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2979,7 +2991,7 @@ msgstr "" "questa classe è fornire un accesso semplificato alle risorse relative a " "Vendor attraverso il framework REST di Django." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2996,7 +3008,7 @@ msgstr "" "accessibili. Estende l'insieme di base `EvibesViewSet` e fa uso del sistema " "di filtraggio di Django per interrogare i dati." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3015,7 +3027,7 @@ msgstr "" "serializzatori in base all'azione specifica da eseguire e applica le " "autorizzazioni di conseguenza durante l'interazione con i dati degli ordini." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3030,13 +3042,13 @@ msgstr "" "richiesta. Inoltre, fornisce un'azione dettagliata per gestire il feedback " "sulle istanze di OrderProduct." -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestisce le operazioni relative alle immagini dei prodotti " "nell'applicazione." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3044,15 +3056,15 @@ msgstr "" "Gestisce il recupero e la gestione delle istanze di PromoCode attraverso " "varie azioni API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Rappresenta un insieme di viste per la gestione delle promozioni." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Gestisce le operazioni relative ai dati delle scorte nel sistema." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3072,7 +3084,7 @@ msgstr "" "solo la propria lista dei desideri, a meno che non vengano concessi permessi" " espliciti." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3086,12 +3098,12 @@ msgstr "" "specializzati per diversi metodi HTTP, override del serializzatore e " "gestione dei permessi in base al contesto della richiesta." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Errore di geocodifica: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo index 43b350d6f5cdc8cd3e62af358f21512fc39f8f41..59a3ac23d58b78f9f6462010cabea06d9e082db2 100644 GIT binary patch delta 13078 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 delta 12832 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 diff --git a/core/locale/ja_JP/LC_MESSAGES/django.po b/core/locale/ja_JP/LC_MESSAGES/django.po index 249ca5e9..8aca7cc1 100644 --- a/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/core/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "画像" msgid "images" msgstr "画像" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "在庫" @@ -114,11 +114,11 @@ msgstr "在庫" msgid "stocks" msgstr "株式" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "商品のご注文" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "商品のご注文" @@ -126,7 +126,7 @@ msgstr "商品のご注文" msgid "children" msgstr "子供たち" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "コンフィグ" @@ -178,7 +178,7 @@ msgstr "モメンタル" msgid "successful" msgstr "成功" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "キャッシュI/O" @@ -202,7 +202,7 @@ msgstr "アプリケーションの公開可能なパラメータを取得する msgid "send a message to the support team" msgstr "サポートチームにメッセージを送る" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "CORSされたURLを要求する。httpsのみ許可。" @@ -420,7 +420,7 @@ msgstr "" "注文の購入を確定する。force_balance` が使用された場合、ユーザーの残高を使用して購入が完了します。 `force_payment` " "が使用された場合、トランザクションが開始されます。" -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "アカウントを作成せずに注文を購入する" @@ -696,271 +696,271 @@ msgstr "注文と商品の関係を削除する" msgid "add or remove feedback on an order–product relation" msgstr "注文と商品の関係に関するフィードバックを追加または削除する。" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "検索語はありません。" -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "検索" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "ユーユーアイディー" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "名称" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "カテゴリー" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "カテゴリー ナメクジ" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "タグ" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "最低価格" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "最高価格" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "アクティブ" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "ブランド" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "属性" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "数量" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "スラッグ" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "デジタル" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "サブカテゴリーを含む" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "個人注文商品を含む" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategoriesフラグを使うには、category_uuidがなければならない。" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "検索(ID、製品名または部品番号)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "購入時期" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "以前に購入したもの(含む)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "ユーザーEメール" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "ユーザーUUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "ステータス" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "人間が読めるID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "親" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "カテゴリー全体(少なくとも1つの製品があるかどうか)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "レベル" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "製品UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "キャッシュを探すキー、またはキャッシュにセットするキー" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "キャッシュに保存するデータ" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "キャッシュにデータをセットするタイムアウト時間(秒" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "キャッシュ・データ" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "リクエストされたURLからキャメル化されたJSONデータ" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://で始まるURLのみが許可されます。" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "注文に商品を追加する" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "注文 {order_uuid} が見つかりません!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "注文からすべての商品を削除する" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "注文する" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "注文商品のリストに対してアクションを実行する" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "削除/追加" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "アクションは \"add \"か \"remove \"のどちらかでなければならない!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "ウィッシュリストの商品リストに対してアクションを実行する" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "wishlist_uuid`の値を指定してください。" -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "ウィッシュリスト {wishlist_uuid} が見つかりません!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "注文に商品を追加する" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "注文から商品を削除する" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "注文する" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "属性は、attr1=value1,attr2=value2のような形式の文字列として送信してください。" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "orderproductに対するフィードバックを追加または削除する。" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "アクションは `add` または `remove` のいずれかでなければならない!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} が見つかりません!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "ユーザーが提供したオリジナルのアドレス文字列" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "上限は1から10の間でなければならない" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 魅力のように動作" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "属性" @@ -973,11 +973,11 @@ msgid "groups of attributes" msgstr "属性のグループ" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "カテゴリー" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "ブランド" @@ -986,7 +986,7 @@ msgid "category image url" msgstr "カテゴリー" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "マークアップ率" @@ -1007,7 +1007,7 @@ msgstr "このカテゴリのタグ" msgid "products in this category" msgstr "このカテゴリの製品" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "ベンダー" @@ -1032,7 +1032,7 @@ msgid "represents feedback from a user." msgstr "ユーザーからのフィードバックを表す。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "お知らせ" @@ -1040,7 +1040,7 @@ msgstr "お知らせ" msgid "download url for this order product if applicable" msgstr "該当する場合は、この注文商品のダウンロードURLを入力してください。" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "フィードバック" @@ -1048,7 +1048,7 @@ msgstr "フィードバック" msgid "a list of order products in this order" msgstr "注文商品のリスト" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "請求先住所" @@ -1074,7 +1074,7 @@ msgstr "ご注文の商品はすべてデジタルですか?" msgid "transactions for this order" msgstr "この注文の取引" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "受注状況" @@ -1086,19 +1086,19 @@ msgstr "画像URL" msgid "product's images" msgstr "製品画像" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "カテゴリー" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "フィードバック" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "ブランド" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "属性グループ" @@ -1126,7 +1126,7 @@ msgstr "フィードバック数" msgid "only available for personal orders" msgstr "個人注文のみの商品" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "製品紹介" @@ -1138,15 +1138,15 @@ msgstr "プロモコード" msgid "products on sale" msgstr "販売商品" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "プロモーション" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "ベンダー" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1154,11 +1154,11 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "ウィッシュリスト" @@ -1166,7 +1166,7 @@ msgstr "ウィッシュリスト" msgid "tagged products" msgstr "タグ別アーカイブ" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "商品タグ" @@ -1251,7 +1251,7 @@ msgstr "製品検索結果" msgid "posts search results" msgstr "製品検索結果" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1260,23 +1260,23 @@ msgid "" msgstr "" "属性グループを表し、階層化することができます。このクラスは、属性グループの管理と整理に使用します。属性グループは親グループを持つことができ、階層構造を形成します。これは、複雑なシステムで属性をより効果的に分類・管理するのに便利です。" -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "このグループの親" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "親属性グループ" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "属性グループ名" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "属性グループ" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1289,39 +1289,47 @@ msgstr "" "外部ベンダーとその相互作用要件に関する情報を格納できるベンダー・エンティティを表します。Vendor " "クラスは、外部ベンダーに関連する情報を定義・管理するために使用します。これは、ベンダーの名前、通信に必要な認証の詳細、ベンダーから取得した商品に適用されるパーセンテージのマークアップを格納します。このモデルは、追加のメタデータと制約も保持するため、サードパーティ・ベンダーとやり取りするシステムでの使用に適しています。" -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "ベンダーのAPI通信に必要な認証情報とエンドポイントを保存する。" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "認証情報" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "このベンダーから取得した商品のマークアップを定義する。" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "ベンダーのマークアップ率" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "このベンダーの名前" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "ベンダー名" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "レスポンスファイル" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "ベンダーの最終処理回答" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "ベンダーの統合ファイルパス" + +#: core/models.py:154 +msgid "integration path" +msgstr "統合パス" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1332,27 +1340,27 @@ msgstr "" "製品を分類または識別するために使用される製品タグを表します。ProductTag " "クラスは、内部タグ識別子とユーザーフレンドリーな表示名の組み合わせによって、製品を一意に識別および分類するように設計されています。ミキシンを通じてエクスポートされる操作をサポートし、管理目的のためにメタデータのカスタマイズを提供します。" -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "商品タグの内部タグ識別子" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "タグ名" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "商品タグのユーザーフレンドリーな名前" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "タグ表示名" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "商品タグ" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1360,15 +1368,15 @@ msgid "" msgstr "" "商品に使用されるカテゴリータグを表します。このクラスは、商品の関連付けと分類に使用できるカテゴリタグをモデル化します。内部タグ識別子とユーザーフレンドリーな表示名の属性が含まれます。" -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "カテゴリタグ" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "カテゴリータグ" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1382,51 +1390,51 @@ msgid "" msgstr "" "関連するアイテムを階層構造で整理し、グループ化するためのカテゴリ・エンティティを表します。カテゴリは、親子関係をサポートする他のカテゴリとの階層関係を持つことができます。このクラスには、カテゴリ関連機能の基盤となるメタデータおよび視覚表現のためのフィールドが含まれます。このクラスは通常、アプリケーション内で商品カテゴリやその他の類似のグループ化を定義および管理するために使用され、ユーザや管理者がカテゴリの名前、説明、階層を指定したり、画像、タグ、優先度などの属性を割り当てることができます。" -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "このカテゴリーを表す画像をアップロードする" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "カテゴリーイメージ" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "このカテゴリの商品のマークアップ率を定義する" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "階層構造を形成するこのカテゴリの親" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "親カテゴリー" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "カテゴリー名" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "このカテゴリの名前を入力してください。" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "このカテゴリの詳細説明を追加する" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "カテゴリー説明" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "このカテゴリーを説明またはグループ化するのに役立つタグ" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "優先順位" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1436,47 +1444,47 @@ msgid "" msgstr "" "システム内のブランド・オブジェクトを表します。このクラスは、名前、ロゴ、説明、関連カテゴリ、一意のスラッグ、および優先順位など、ブランドに関連する情報と属性を処理します。このクラスによって、アプリケーション内でブランド関連データを整理し、表現することができます。" -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "ブランド名" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "ブランド名" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "このブランドを代表するロゴをアップロードする" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "小さなブランドイメージ" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "このブランドを象徴する大きなロゴをアップロードする" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "大きなブランドイメージ" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "ブランドの詳細な説明を加える" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "ブランド説明" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "このブランドが関連するオプション・カテゴリー" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "カテゴリー" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1487,68 +1495,68 @@ msgid "" msgstr "" "システムで管理されている商品の在庫を表します。このクラスは、ベンダー、商品、およびそれらの在庫情報間の関係の詳細や、価格、購入価格、数量、SKU、デジタル資産などの在庫関連プロパティを提供します。これは在庫管理システムの一部で、さまざまなベンダーから入手可能な製品の追跡と評価を可能にします。" -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "関連ベンダー" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "販売価格" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "関連製品" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "在庫数" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "在庫数" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "ベンダーのSKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "デジタルファイル" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "ストックエントリー" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1563,51 +1571,51 @@ msgstr "" " (Category、Brand、ProductTag など) " "と相互作用し、パフォーマンスを向上させるために、頻繁にアクセスされるプロパティのキャッシュを管理します。アプリケーション内で商品データとその関連情報を定義し、操作するために使用されます。" -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "この製品が属するカテゴリ" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "オプションでこの製品をブランドと関連付ける" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "この製品がデジタル配信されるかどうかを示す" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "製品はデジタルか" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "製品の明確な識別名を提供する" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "商品名" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "商品説明" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "この製品の品番" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "品番" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "この製品の在庫管理単位" @@ -1671,11 +1679,11 @@ msgstr "この属性の名前" msgid "attribute's name" msgstr "属性名" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "フィルタリング可能" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "この属性がフィルタリングに使用できるかどうかを指定する。" @@ -1726,27 +1734,27 @@ msgstr "画像のaltテキスト" msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "商品画像" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "表示優先度" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "商品画像" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1757,39 +1765,39 @@ msgid "" msgstr "" "割引を伴う商品の販促キャンペーンを表します。このクラスは、商品に対してパーセンテージベースの割引を提供する販促キャンペーンを定義および管理するために使用します。このクラスには、割引率を設定し、プロモーションの詳細を提供し、該当する商品にリンクするための属性が含まれます。商品カタログと統合して、キャンペーンの対象商品を決定します。" -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "割引率" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "プロモーション名" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "プロモーション内容" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "含まれる製品" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "プロモーション" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1798,23 +1806,23 @@ msgid "" msgstr "" "希望する商品を保存・管理するためのユーザーのウィッシュリストを表します。このクラスは、商品のコレクションを管理する機能を提供し、商品の追加や削除などの操作をサポートし、複数の商品を一度に追加したり削除したりする操作をサポートします。" -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "ウィッシュリスト" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1825,19 +1833,19 @@ msgid "" msgstr "" "商品に関連付けられたドキュメンタリーのレコードを表します。このクラスは、ファイルのアップロードとそのメタデータを含む、特定の商品に関連するドキュメンタリーに関する情報を格納するために使用されます。ドキュメントファイルのファイルタイプと保存パスを処理するメソッドとプロパティが含まれています。特定のミックスインから機能を拡張し、追加のカスタム機能を提供します。" -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "ドキュメンタリー" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "ドキュメンタリー" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "未解決" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1854,59 +1862,59 @@ msgstr "" "レスポンスを保存してさらなる処理や検査を行うことができます。また、このクラスは住所とユーザを関連付けることができ、 " "パーソナライズされたデータの取り扱いを容易にします。" -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "お客様の住所" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "住所" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "ストリート" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "地区" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "都市" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "地域" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "郵便番号" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "国名" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "ジオロケーションポイント(経度、緯度)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "この住所に対するジオコーダーからの完全なJSON応答" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "ジオコーディング・サービスからの保存されたJSONレスポンス" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "住所" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "住所" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1919,86 +1927,86 @@ msgstr "" "(金額またはパーセンテージ)、有効期間、関連するユーザ " "(もしあれば)、および使用状況など、プロモーションコードに関する詳細を格納します。これは、制約が満たされていることを保証しながら、プロモコードを検証し、注文に適用する機能を含んでいます。" -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "プロモコード識別子" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "固定割引額" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "割引率" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "終了有効時間" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "開始有効時間" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "担当ユーザー" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "プロモコード" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "プロモコード" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2009,144 +2017,144 @@ msgid "" msgstr "" "ユーザーによる注文を表します。このクラスは、請求や配送情報、ステータス、関連するユーザ、通知、関連する操作などのさまざまな属性を含む、アプリケーション内の注文をモデル化します。注文は関連する商品を持つことができ、プロモーションを適用し、住所を設定し、配送または請求の詳細を更新することができます。同様に、注文のライフサイクルにおける商品の管理もサポートします。" -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "この注文に使用される請求先住所" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "この注文に適用されるプロモコード" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "プロモーションコード適用" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "この注文に使用された配送先住所" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "配送先住所" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "ライフサイクルにおける現在の注文状況" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "注文状況" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "この注文の注文属性のJSON表現" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "注文を行ったユーザー" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "ユーザー" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "注文が確定したタイムスタンプ" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "時間を買う" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "オーダーの人間が読み取り可能な識別子。" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "人間が読めるID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "オーダー" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name}はクエリ<{query}と一緒に存在しません!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "配送先住所が指定された現物商品のみ購入可能!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "アドレスが存在しない" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "無効なフォース値" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "ユーザーがいない注文は購入できない!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "残高のないユーザーは、残高で購入することはできない!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "支払方法が無効です:{available_payment_methods}からの{payment_method}が無効です!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2160,108 +2168,108 @@ msgid "" msgstr "" "注文に関連する商品とその属性を表す。OrderProductモデルは、購入価格、数量、商品属性、ステータスなどの詳細を含む、注文の一部である商品に関する情報を保持します。ユーザーや管理者への通知を管理し、商品残高の返却やフィードバックの追加などの操作を処理します。このモデルはまた、合計価格の計算やデジタル商品のダウンロードURLの生成など、ビジネスロジックをサポートするメソッドやプロパティも提供します。このモデルはOrderモデルとProductモデルと統合され、それらへの参照を保存します。" -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "社内コメント" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "ユーザー通知" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "製品属性の順序" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "親注文" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "製品数量" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "製品ラインの状況" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproductには関連する注文がなければならない!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "フィードバックに指定されたアクションが間違っています:{action}です!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "受信していない注文をフィードバックすることはできません。" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "名称" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "統合のURL" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "認証情報" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "デフォルトのCRMプロバイダーは1つだけです。" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "注文のCRMリンク" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "オーダーのCRMリンク" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2273,15 +2281,15 @@ msgstr "" "注文に関連するデジタル資産のダウンロード機能を表します。DigitalAssetDownloadクラスは、注文商品に関連するダウンロードを管理し、アクセスする機能を提供します。このクラスは、関連する注文商品、ダウンロード数、およびアセットが公開されているかどうかの情報を保持します。関連する注文が完了したステータスのときに、アセットをダウンロードするための" " URL を生成するメソッドも含まれています。" -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "ダウンロード" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "ダウンロード" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2291,60 +2299,52 @@ msgid "" msgstr "" "製品に対するユーザのフィードバックを管理します。このクラスは、購入した特定の商品に対するユーザのフィードバックを取得し、保存するために設計されています。ユーザのコメント、注文の関連商品への参照、そしてユーザが割り当てた評価を保存する属性を含みます。このクラスは、フィードバックデータを効果的にモデル化し、管理するためにデータベースフィールドを使用します。" -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "ユーザーから寄せられた製品使用体験に関するコメント" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "フィードバック・コメント" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "このフィードバックが対象としている注文の特定の製品を参照する。" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "関連注文商品" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "ユーザーによる製品の評価" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "製品評価" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "フィードバックを追加するには、コメント、評価、および注文商品の uuid を入力する必要があります。" -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "プロモコード作成中にエラーが発生しました:{e!s}です。" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "ホーム" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "お問い合わせ" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "会社概要" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "お支払いについて" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "配送" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2509,11 +2509,11 @@ msgstr "" "すべての権利\n" " 予約済み" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "データとタイムアウトの両方が必要" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "無効なタイムアウト値です。" @@ -2545,7 +2545,7 @@ msgstr "この操作を行う権限がありません。" msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URLパラメータを設定する必要があります!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてください!" @@ -2599,15 +2599,23 @@ msgstr "グローバル検索クエリを処理する。" msgid "Handles the logic of buying as a business without registration." msgstr "登録なしでビジネスとして購入するロジックを扱う。" -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuidは必須です。" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "デジタルアセットのダウンロードは1回限りです。" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "注文商品に商品がない" + +#: core/views.py:359 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." @@ -2615,11 +2623,11 @@ msgstr "" "注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" "この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2627,7 +2635,7 @@ msgstr "" "ウェブサイトのファビコンへのリクエストを処理します。\n" "この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2636,7 +2644,11 @@ msgstr "" "リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " "インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "eVibes の現在のバージョンを返します。" + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2648,7 +2660,7 @@ msgstr "" " エンティティに対する アクションや操作を扱うための機能を提供します。現在のアクションに基づいた動的なシリアライザークラスのサポート、 " "カスタマイズ可能なパーミッション、レンダリングフォーマットが含まれます。" -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2660,7 +2672,7 @@ msgstr "" "オブジェクトを管理するためのビューセットを表します。データのフィルタリング、シリアライズ、取得など、AttributeGroup " "に関連する操作を処理します。このクラスは、アプリケーションのAPIレイヤの一部であり、AttributeGroupデータの要求と応答を処理する標準化された方法を提供します。" -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2673,7 +2685,7 @@ msgstr "" "エンドポイントのセットを提供します。このクラスは、Attribute " "オブジェクトのクエリ、フィルタリング、およびシリアライズを管理し、特定のフィールドによるフィルタリングや、リクエストに応じた詳細情報と簡略化された情報の取得など、返されるデータの動的な制御を可能にします。" -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2686,7 +2698,7 @@ msgstr "" "のビューセット機構と統合され、異なるアクションに適切なシリアライザを使います。フィルタリング機能は DjangoFilterBackend " "を通して提供されます。" -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2696,7 +2708,7 @@ msgid "" msgstr "" "Category関連の操作のためのビューを管理します。CategoryViewSetクラスは、システム内のCategoryモデルに関連する操作を処理する責任があります。カテゴリデータの取得、フィルタリング、シリアライズをサポートします。ビューセットはまた、許可されたユーザーだけが特定のデータにアクセスできるようにパーミッションを強制します。" -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2707,7 +2719,7 @@ msgstr "" "オブジェクトのクエリ、フィルタリング、シリアライズの機能を提供します。Django の ViewSet フレームワークを使い、 Brand " "オブジェクトの API エンドポイントの実装を簡素化します。" -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2722,7 +2734,7 @@ msgstr "" " `EvibesViewSet` を継承し、 RESTful API 操作のために Django REST " "フレームワークと統合しています。商品の詳細を取得したり、パーミッションを適用したり、商品の関連するフィードバックにアクセスするためのメソッドを含みます。" -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2735,7 +2747,7 @@ msgstr "" "フィルタ設定、シリアライザクラスを定義します。このクラスの目的は、 Django REST フレームワークを通して Vendor " "関連リソースへの合理的なアクセスを提供することです。" -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2749,7 +2761,7 @@ msgstr "" "オブジェクトのパーミッションベースの処理を実装することです。ベースとなる `EvibesViewSet` を拡張し、Django " "のフィルタリングシステムを利用してデータを取得します。" -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2762,7 +2774,7 @@ msgstr "" "注文と関連する操作を管理するための " "ViewSet。このクラスは、注文オブジェクトを取得、変更、管理する機能を提供します。商品の追加や削除、登録ユーザや未登録ユーザの購入の実行、現在の認証ユーザの保留中の注文の取得など、注文操作を処理するためのさまざまなエンドポイントを含みます。ViewSetは、実行される特定のアクションに基づいて複数のシリアライザを使用し、注文データを操作している間、それに応じてパーミッションを強制します。" -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2774,25 +2786,25 @@ msgstr "" "操作とカスタムアクションを可能にします。これは、要求されたアクションに基づくフィルタリング、パーミッションチェック、シリアライザーの切り替えを含みます。さらに、OrderProduct" " インスタンスに関するフィードバックを処理するための詳細なアクションを提供します。" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "アプリケーション内の商品画像に関する操作を管理します。" -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "様々なAPIアクションによるプロモコードインスタンスの取得と処理を管理します。" -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "プロモーションを管理するためのビューセットを表します。" -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "システム内のストックデータに関する操作を行う。" -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2804,7 +2816,7 @@ msgid "" msgstr "" "ウィッシュリスト操作を管理するためのViewSet。WishlistViewSetは、ユーザーのウィッシュリストと対話するためのエンドポイントを提供し、ウィッシュリスト内の商品の検索、変更、カスタマイズを可能にします。このViewSetは、ウィッシュリスト商品の追加、削除、一括アクションなどの機能を容易にします。明示的なパーミッションが付与されていない限り、ユーザーが自分のウィッシュリストのみを管理できるよう、パーミッションチェックが統合されています。" -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2816,12 +2828,12 @@ msgstr "" "クラスは、住所エンティティに関連する CRUD 操作、フィルタリング、カスタムアクションを可能にします。異なる HTTP " "メソッドに特化した振る舞いや、シリアライザのオーバーライド、 リクエストコンテキストに基づいたパーミッション処理などを含みます。" -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ジオコーディングエラー:{e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po index ef29e6ec..5484345d 100644 --- a/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -108,7 +108,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "" @@ -116,11 +116,11 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "" @@ -128,7 +128,7 @@ msgstr "" msgid "children" msgstr "" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "" @@ -180,7 +180,7 @@ msgstr "" msgid "successful" msgstr "" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "" @@ -202,7 +202,7 @@ msgstr "" msgid "send a message to the support team" msgstr "" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "" @@ -414,7 +414,7 @@ msgid "" "transaction is initiated." msgstr "" -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "" @@ -682,271 +682,271 @@ msgstr "" msgid "add or remove feedback on an order–product relation" msgstr "" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "" -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "" -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like attr1=value1," "attr2=value2" msgstr "" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "" @@ -959,11 +959,11 @@ msgid "groups of attributes" msgstr "" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "" @@ -972,7 +972,7 @@ msgid "category image url" msgstr "" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "" @@ -992,7 +992,7 @@ msgstr "" msgid "products in this category" msgstr "" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "" @@ -1017,7 +1017,7 @@ msgid "represents feedback from a user." msgstr "" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "" @@ -1025,7 +1025,7 @@ msgstr "" msgid "download url for this order product if applicable" msgstr "" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "" @@ -1033,7 +1033,7 @@ msgstr "" msgid "a list of order products in this order" msgstr "" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "" @@ -1059,7 +1059,7 @@ msgstr "" msgid "transactions for this order" msgstr "" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "" @@ -1071,19 +1071,19 @@ msgstr "" msgid "product's images" msgstr "" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "" @@ -1111,7 +1111,7 @@ msgstr "" msgid "only available for personal orders" msgstr "" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "" @@ -1123,15 +1123,15 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1139,11 +1139,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "" @@ -1151,7 +1151,7 @@ msgstr "" msgid "tagged products" msgstr "" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "" @@ -1236,7 +1236,7 @@ msgstr "" msgid "posts search results" msgstr "" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1244,23 +1244,23 @@ msgid "" "categorizing and managing attributes more effectively in acomplex system." msgstr "" -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1271,39 +1271,47 @@ msgid "" "use in systems that interact with third-party vendors." msgstr "" -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "" + +#: core/models.py:154 +msgid "integration path" +msgstr "" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1312,42 +1320,42 @@ msgid "" "metadata customization for administrative purposes." msgstr "" -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "" -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1360,51 +1368,51 @@ msgid "" "priority." msgstr "" -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1412,47 +1420,47 @@ msgid "" "organization and representation of brand-related data within the application." msgstr "" -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides " "details about the relationship between vendors, products, and their stock " @@ -1462,67 +1470,67 @@ msgid "" "from various vendors." msgstr "" -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:434 core/models.py:705 core/models.py:752 core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 core/models.py:1644 msgid "associated product" msgstr "" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1534,51 +1542,51 @@ msgid "" "product data and its associated information within an application." msgstr "" -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "" @@ -1640,11 +1648,11 @@ msgstr "" msgid "attribute's name" msgstr "" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" @@ -1693,27 +1701,27 @@ msgstr "" msgid "upload the image file for this product" msgstr "" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1723,39 +1731,39 @@ msgid "" "affected items in the campaign." msgstr "" -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1763,23 +1771,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "" -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1789,19 +1797,19 @@ msgid "" "custom features." msgstr "" -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations " "with a user. Provides functionality for geographic and address data storage, " @@ -1813,59 +1821,59 @@ msgid "" "address with a user, facilitating personalized data handling." msgstr "" -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1875,86 +1883,86 @@ msgid "" "apply the promo code to an order while ensuring constraints are met." msgstr "" -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -1964,144 +1972,144 @@ msgid "" "supports managing the products in the order lifecycle." msgstr "" -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2114,108 +2122,108 @@ msgid "" "Product models and stores a reference to them." msgstr "" -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2225,15 +2233,15 @@ msgid "" "the asset when the associated order is in a completed status." msgstr "" -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2242,59 +2250,51 @@ msgid "" "fields to effectively model and manage feedback data." msgstr "" -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "" -#: core/models.py:1851 +#: core/models.py:1848 msgid "references the specific product in an order that this feedback is about" msgstr "" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2455,11 +2455,11 @@ msgid "" " reserved" msgstr "" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" @@ -2491,7 +2491,7 @@ msgstr "" msgid "NOMINATIM_URL must be configured." msgstr "" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2542,15 +2542,23 @@ msgstr "" msgid "Handles the logic of buying as a business without registration." msgstr "" -#: core/views.py:312 -msgid "you can only download the digital asset once" +#: core/views.py:309 +msgid "order_product_uuid is required" msgstr "" #: core/views.py:315 +msgid "you can only download the digital asset once" +msgstr "" + +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "" + +#: core/views.py:359 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 " @@ -2558,11 +2566,11 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "" -#: core/views.py:370 +#: core/views.py:376 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2570,14 +2578,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: core/views.py:382 +#: core/views.py:388 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 "" -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "" + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2586,7 +2598,7 @@ msgid "" "and rendering formats." msgstr "" -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations " "related to AttributeGroup, including filtering, serialization, and retrieval " @@ -2594,7 +2606,7 @@ msgid "" "standardized way to process requests and responses for AttributeGroup data." msgstr "" -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2604,7 +2616,7 @@ msgid "" "depending on the request." msgstr "" -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2613,7 +2625,7 @@ msgid "" "capabilities are provided through the DjangoFilterBackend." msgstr "" -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2622,7 +2634,7 @@ msgid "" "can access specific data." msgstr "" -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2630,7 +2642,7 @@ msgid "" "endpoints for Brand objects." msgstr "" -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2641,7 +2653,7 @@ msgid "" "product." msgstr "" -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2650,7 +2662,7 @@ msgid "" "Vendor-related resources through the Django REST framework." msgstr "" -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2660,7 +2672,7 @@ msgid "" "use of Django's filtering system for querying data." msgstr "" -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2671,7 +2683,7 @@ msgid "" "enforces permissions accordingly while interacting with order data." msgstr "" -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2680,25 +2692,25 @@ msgid "" "feedback on OrderProduct instances" msgstr "" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "" -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "" -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2709,7 +2721,7 @@ msgid "" "are granted." msgstr "" -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2718,12 +2730,12 @@ msgid "" "on the request context." msgstr "" -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ko_KR/LC_MESSAGES/django.mo b/core/locale/ko_KR/LC_MESSAGES/django.mo index 6f33fb3972ac223ac315677cb6cbfd85c0757a90..3614f78a16f57a84f60a68c129e10590df11bdc7 100644 GIT binary patch delta 13063 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "이미지" msgid "images" msgstr "이미지" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "재고" @@ -114,11 +114,11 @@ msgstr "재고" msgid "stocks" msgstr "주식" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "제품 주문" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "제품 주문" @@ -126,7 +126,7 @@ msgstr "제품 주문" msgid "children" msgstr "어린이" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "구성" @@ -178,7 +178,7 @@ msgstr "순간" msgid "successful" msgstr "성공" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "캐시 I/O" @@ -202,7 +202,7 @@ msgstr "애플리케이션의 노출 가능한 매개변수 가져오기" msgid "send a message to the support team" msgstr "지원팀에 메시지 보내기" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "CORSed URL을 요청합니다. https만 허용됩니다." @@ -421,7 +421,7 @@ msgid "" msgstr "" "주문 구매를 완료합니다. 강제 잔액`을 사용하면 사용자의 잔액을 사용하여 구매가 완료되고, `강제 결제`를 사용하면 거래가 시작됩니다." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "계정 생성 없이 주문 구매" @@ -693,271 +693,271 @@ msgstr "주문-제품 관계 삭제" msgid "add or remove feedback on an order–product relation" msgstr "주문-제품 관계에 대한 피드백 추가 또는 제거" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "검색어가 입력되지 않았습니다." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "검색" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "이름" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "카테고리" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "카테고리 슬러그" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "태그" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "최소 가격" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "최대 가격" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "활성 상태" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "브랜드" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "속성" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "수량" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "슬러그" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "디지털" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "하위 카테고리 포함" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "개인 주문 제품 포함" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "include_subcategories 플래그를 사용하려면 category_uuid가 있어야 합니다." -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "검색(ID, 제품명 또는 부품 번호)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "구매 후(포함)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "이전 구매(포함)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "사용자 이메일" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "사용자 UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "상태" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "사람이 읽을 수 있는 ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "부모" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "전체 카테고리(1개 이상의 제품 보유 여부)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "레벨" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "제품 UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "캐시에서 찾거나 캐시에 설정할 키" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "캐시에 저장할 데이터" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "캐시에 저장할 데이터를 설정하는 데 걸리는 시간(초)" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "캐시된 데이터" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://로 시작하는 URL만 허용됩니다." -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "주문에 제품 추가" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "주문 {order_uuid}을 찾을 수 없습니다!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "주문에서 모든 제품 제거" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "주문 구매" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "주문_uuid 또는 주문_hr_id 중 하나를 입력하세요 - 상호 배타적입니다!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 메서드에서 잘못된 유형이 발생했습니다: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "제품 목록에 대한 작업을 순서대로 수행합니다." -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "제거/추가" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "작업은 \"추가\" 또는 \"제거\"여야 합니다!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "위시리스트의 제품 목록에서 작업 수행하기" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "위시리스트_유아이디` 값을 입력하세요." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "위시리스트 {wishlist_uuid}를 찾을 수 없습니다!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "주문에 제품 추가" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "주문에서 제품 제거" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "주문 구매" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "속성을 attr1=value1,attr2=value2와 같은 형식의 문자열로 보내주세요." -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "주문 제품에 대한 피드백 추가 또는 삭제" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "작업은 '추가' 또는 '제거' 중 하나여야 합니다!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "주문 제품 {order_product_uuid}을 찾을 수 없습니다!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "사용자가 제공한 원본 주소 문자열" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "한도는 1에서 10 사이여야 합니다." -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 마법처럼 작동" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "속성" @@ -970,11 +970,11 @@ msgid "groups of attributes" msgstr "속성 그룹" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "카테고리" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "브랜드" @@ -983,7 +983,7 @@ msgid "category image url" msgstr "카테고리" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "마크업 퍼센트" @@ -1004,7 +1004,7 @@ msgstr "이 카테고리의 태그" msgid "products in this category" msgstr "이 카테고리의 제품" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "공급업체" @@ -1029,7 +1029,7 @@ msgid "represents feedback from a user." msgstr "사용자의 피드백을 나타냅니다." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "알림" @@ -1037,7 +1037,7 @@ msgstr "알림" msgid "download url for this order product if applicable" msgstr "해당되는 경우 이 주문 제품의 URL 다운로드" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "피드백" @@ -1045,7 +1045,7 @@ msgstr "피드백" msgid "a list of order products in this order" msgstr "주문 제품 목록은 다음 순서로 표시됩니다." -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "청구서 수신 주소" @@ -1071,7 +1071,7 @@ msgstr "주문에 포함된 모든 제품이 디지털 제품인가요?" msgid "transactions for this order" msgstr "이 주문에 대한 거래" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "주문" @@ -1083,19 +1083,19 @@ msgstr "이미지 URL" msgid "product's images" msgstr "제품 이미지" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "카테고리" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "피드백" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "브랜드" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "속성 그룹" @@ -1123,7 +1123,7 @@ msgstr "피드백 수" msgid "only available for personal orders" msgstr "개인 주문만 가능한 제품" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "제품" @@ -1135,15 +1135,15 @@ msgstr "프로모션 코드" msgid "products on sale" msgstr "판매 중인 제품" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "프로모션" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "공급업체" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1151,11 +1151,11 @@ msgstr "공급업체" msgid "product" msgstr "제품" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "위시리스트 제품" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "위시리스트" @@ -1163,7 +1163,7 @@ msgstr "위시리스트" msgid "tagged products" msgstr "태그가 지정된 제품" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "제품 태그" @@ -1248,7 +1248,7 @@ msgstr "제품 검색 결과" msgid "posts search results" msgstr "제품 검색 결과" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1258,23 +1258,23 @@ msgstr "" "계층적일 수 있는 속성 그룹을 나타냅니다. 이 클래스는 속성 그룹을 관리하고 구성하는 데 사용됩니다. 속성 그룹은 상위 그룹을 가질 수 " "있으며 계층 구조를 형성할 수 있습니다. 이는 복잡한 시스템에서 속성을 보다 효과적으로 분류하고 관리하는 데 유용할 수 있습니다." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "이 그룹의 부모" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "상위 속성 그룹" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "속성 그룹의 이름" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "속성 그룹" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1289,39 +1289,47 @@ msgstr "" "제품에 적용된 마크업 비율을 저장합니다. 또한 이 모델은 추가 메타데이터 및 제약 조건을 유지하므로 타사 공급업체와 상호 작용하는 " "시스템에서 사용하기에 적합합니다." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "공급업체의 API 통신에 필요한 자격 증명과 엔드포인트를 저장합니다." -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "인증 정보" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "이 공급업체에서 검색된 제품에 대한 마크업을 정의합니다." -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "공급업체 마크업 비율" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "이 공급업체의 이름" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "공급업체 이름" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "응답 파일" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "공급업체의 마지막 처리 응답" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "공급업체의 통합 파일 경로" + +#: core/models.py:154 +msgid "integration path" +msgstr "통합 경로" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1333,27 +1341,27 @@ msgstr "" "이름의 조합을 통해 제품을 고유하게 식별하고 분류하도록 설계되었습니다. 믹스인을 통해 내보낸 작업을 지원하며 관리 목적으로 메타데이터 " "사용자 지정을 제공합니다." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "제품 태그의 내부 태그 식별자" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "태그 이름" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "제품 태그의 사용자 친화적인 이름" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "태그 표시 이름" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "제품 태그" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1362,15 +1370,15 @@ msgstr "" "제품에 사용되는 카테고리 태그를 나타냅니다. 이 클래스는 제품을 연결하고 분류하는 데 사용할 수 있는 카테고리 태그를 모델링합니다. 내부" " 태그 식별자 및 사용자 친화적인 표시 이름에 대한 속성을 포함합니다." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "카테고리 태그" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "카테고리 태그" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1387,51 +1395,51 @@ msgstr "" "있습니다. 이 클래스는 일반적으로 애플리케이션 내에서 제품 카테고리 또는 기타 유사한 그룹을 정의하고 관리하는 데 사용되며, 사용자나 " "관리자가 카테고리의 이름, 설명 및 계층 구조를 지정하고 이미지, 태그 또는 우선순위와 같은 속성을 할당할 수 있도록 합니다." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "이 카테고리를 대표하는 이미지 업로드" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "카테고리 이미지" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "이 카테고리의 제품에 대한 마크업 비율을 정의합니다." -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "계층 구조를 형성하는 이 카테고리의 상위 카테고리" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "상위 카테고리" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "카테고리 이름" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "이 카테고리의 이름을 입력합니다." -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "이 카테고리에 대한 자세한 설명 추가" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "카테고리 설명" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "이 카테고리를 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "우선순위" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1442,47 +1450,47 @@ msgstr "" "시스템에서 브랜드 객체를 나타냅니다. 이 클래스는 이름, 로고, 설명, 관련 카테고리, 고유 슬러그, 우선순위 등 브랜드와 관련된 정보 " "및 속성을 처리합니다. 이를 통해 애플리케이션 내에서 브랜드 관련 데이터를 구성하고 표현할 수 있습니다." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "이 브랜드 이름" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "브랜드 이름" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "이 브랜드를 대표하는 로고 업로드" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "브랜드 작은 이미지" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "이 브랜드를 대표하는 큰 로고 업로드" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "브랜드 빅 이미지" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "브랜드에 대한 자세한 설명 추가" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "브랜드 설명" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "이 브랜드와 연관된 선택적 카테고리" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "카테고리" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1495,68 +1503,68 @@ msgstr "" " 디지털 자산과 같은 재고 관련 속성에 대한 세부 정보를 제공합니다. 다양한 공급업체에서 제공하는 제품을 추적하고 평가할 수 있도록 하는" " 재고 관리 시스템의 일부입니다." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "이 제품 재고를 공급하는 공급업체" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "관련 공급업체" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "마크업 후 고객에게 제공되는 최종 가격" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "판매 가격" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "이 주식 항목과 관련된 제품" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "관련 제품" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "이 제품에 대해 공급업체에 지불한 가격" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "공급업체 구매 가격" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "재고가 있는 제품의 사용 가능한 수량" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "재고 수량" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "제품 식별을 위해 공급업체에서 할당하는 SKU" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "공급업체의 SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "해당되는 경우 이 주식과 관련된 디지털 파일" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "디지털 파일" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "재고 항목" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1572,51 +1580,51 @@ msgstr "" "사용하도록 설계되었습니다. 이 클래스는 관련 모델(예: 카테고리, 브랜드, 제품 태그)과 상호 작용하고 자주 액세스하는 속성에 대한 " "캐싱을 관리하여 성능을 개선합니다. 애플리케이션 내에서 제품 데이터 및 관련 정보를 정의하고 조작하는 데 사용됩니다." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "이 제품이 속한 카테고리" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "선택 사항으로 이 제품을 브랜드와 연결" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "이 제품을 설명하거나 그룹화하는 데 도움이 되는 태그" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "이 제품이 디지털 방식으로 배송되는지 여부를 나타냅니다." -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "제품 디지털화 여부" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "제품에 대한 명확한 식별 이름 제공" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "제품 이름" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "제품에 대한 자세한 설명 추가" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "제품 설명" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "이 제품의 부품 번호" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "부품 번호" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "이 제품의 재고 보관 단위" @@ -1681,11 +1689,11 @@ msgstr "이 속성의 이름" msgid "attribute's name" msgstr "속성 이름" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "필터링 가능" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "는 이 속성을 필터링에 사용할 수 있는지 여부를 지정합니다." @@ -1738,27 +1746,27 @@ msgstr "이미지 대체 텍스트" msgid "upload the image file for this product" msgstr "이 제품의 이미지 파일 업로드" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "제품 이미지" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "이미지가 표시되는 순서를 결정합니다." -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "우선순위 표시" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "이 이미지가 나타내는 제품" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "제품 이미지" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1771,39 +1779,39 @@ msgstr "" "정의하고 관리하는 데 사용됩니다. 이 클래스에는 할인율 설정, 프로모션에 대한 세부 정보 제공 및 해당 제품에 대한 링크를 위한 속성이 " "포함되어 있습니다. 제품 카탈로그와 통합되어 캠페인에서 영향을 받는 품목을 결정합니다." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "선택한 제품에 대한 할인 비율" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "할인 비율" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "이 프로모션의 고유한 이름을 입력하세요." -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "프로모션 이름" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "프로모션 설명" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "이 프로모션에 포함되는 제품 선택" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "포함된 제품" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "프로모션" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1813,23 +1821,23 @@ msgstr "" "원하는 상품을 저장하고 관리하기 위한 사용자의 위시리스트를 나타냅니다. 이 클래스는 제품 컬렉션을 관리하는 기능을 제공하여 제품 추가 및" " 제거와 같은 작업을 지원할 뿐만 아니라 여러 제품을 한 번에 추가 및 제거하는 작업도 지원합니다." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "사용자가 원하는 것으로 표시한 제품" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "이 위시리스트를 소유한 사용자" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "위시리스트의 소유자" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "위시리스트" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1842,19 +1850,19 @@ msgstr "" "정보를 저장하는 데 사용됩니다. 여기에는 다큐멘터리 파일의 파일 유형과 저장 경로를 처리하는 메서드와 프로퍼티가 포함되어 있습니다. 특정" " 믹스인의 기능을 확장하고 추가 사용자 정의 기능을 제공합니다." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "다큐멘터리" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "다큐멘터리" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "해결되지 않음" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1870,59 +1878,59 @@ msgstr "" "저장하도록 설계되었습니다. 지오코딩 API와의 통합을 지원하여 추가 처리 또는 검사를 위해 원시 API 응답을 저장할 수 있습니다. 또한" " 이 클래스를 사용하면 주소를 사용자와 연결하여 개인화된 데이터 처리를 용이하게 할 수 있습니다." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "고객 주소 라인" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "주소 라인" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "거리" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "지구" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "도시" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "지역" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "우편 번호" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "국가" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "지리적 위치 포인트(경도, 위도)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "이 주소에 대한 지오코더의 전체 JSON 응답" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "지오코딩 서비스의 저장된 JSON 응답" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "주소" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "주소" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1935,86 +1943,86 @@ msgstr "" "할인 속성(금액 또는 백분율), 유효 기간, 관련 사용자(있는 경우), 사용 상태 등 프로모션 코드에 대한 세부 정보를 저장합니다. " "여기에는 제약 조건이 충족되는지 확인하면서 프로모션 코드의 유효성을 검사하고 주문에 적용하는 기능이 포함되어 있습니다." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "사용자가 할인을 받기 위해 사용하는 고유 코드" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "프로모션 코드 식별자" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "퍼센트를 사용하지 않을 경우 고정 할인 금액 적용" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "고정 할인 금액" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "고정 금액 미사용 시 적용되는 할인 비율" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "백분율 할인" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "프로모션 코드 만료 시 타임스탬프" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "유효 기간 종료 시간" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "이 프로모코드의 타임스탬프가 유효한 시점" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "유효 기간 시작 시간" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "프로모코드가 사용된 타임스탬프, 아직 사용되지 않은 경우 비워둡니다." -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "사용 타임스탬프" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "해당되는 경우 이 프로모코드에 할당된 사용자" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "할당된 사용자" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "프로모션 코드" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "프로모션 코드" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "할인 유형(금액 또는 백분율)은 한 가지 유형만 정의해야 하며, 두 가지 모두 또는 둘 다 정의해서는 안 됩니다." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "프로모코드가 이미 사용되었습니다." -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "프로모션 코드 {self.uuid}의 할인 유형이 잘못되었습니다!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2027,144 +2035,144 @@ msgstr "" "포함하여 애플리케이션 내에서 주문을 모델링합니다. 주문에는 연결된 제품, 프로모션 적용, 주소 설정, 배송 또는 청구 세부 정보 " "업데이트가 가능합니다. 또한 주문 수명 주기에서 제품을 관리하는 기능도 지원합니다." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "이 주문에 사용된 청구 주소" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "이 주문에 적용된 프로모션 코드(선택 사항)" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "프로모션 코드 적용" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "이 주문에 사용된 배송지 주소" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "배송 주소" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "라이프사이클 내 주문의 현재 상태" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "주문 상태" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "사용자에게 표시할 알림의 JSON 구조, 관리자 UI에서는 테이블 보기가 사용됩니다." -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "이 주문에 대한 주문 속성의 JSON 표현" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "주문한 사용자" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "사용자" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "주문이 완료된 타임스탬프" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "시간 확보" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "사람이 읽을 수 있는 주문 식별자" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "사람이 읽을 수 있는 ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "주문" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "사용자는 한 번에 하나의 대기 주문만 보유해야 합니다!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에는 제품을 추가할 수 없습니다." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "주문에 비활성 제품을 추가할 수 없습니다." -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "재고가 있는 제품보다 많은 제품을 추가할 수 없습니다." -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "보류 중인 주문이 아닌 주문에서는 제품을 제거할 수 없습니다." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "쿼리 <{query}>에 {name}가 존재하지 않습니다!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "프로모코드가 존재하지 않습니다." -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "배송 주소가 지정된 실제 제품만 구매할 수 있습니다!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "주소가 존재하지 않습니다." -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "지금은 구매할 수 없습니다. 몇 분 후에 다시 시도해 주세요." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "잘못된 힘 값" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "빈 주문은 구매할 수 없습니다!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "사용자 없이는 주문을 구매할 수 없습니다!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "잔액이 없는 사용자는 잔액으로 구매할 수 없습니다!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "주문을 완료하기에 자금이 부족합니다." -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "등록하지 않으면 구매할 수 없으므로 고객 이름, 고객 이메일, 고객 전화 번호 등의 정보를 제공하세요." -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "결제 방법이 잘못되었습니다: {payment_method}에서 {available_payment_methods}로!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2181,108 +2189,108 @@ msgstr "" "작업을 처리합니다. 또한 이 모델은 총 가격 계산이나 디지털 제품의 다운로드 URL 생성 등 비즈니스 로직을 지원하는 메서드와 속성을 " "제공합니다. 이 모델은 주문 및 제품 모델과 통합되며 해당 모델에 대한 참조를 저장합니다." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "구매 시점에 고객이 이 제품에 대해 지불한 가격입니다." -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "주문 시점의 구매 가격" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "주문한 제품에 대한 관리자용 내부 댓글" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "내부 의견" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "사용자 알림" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "이 항목의 속성에 대한 JSON 표현" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "주문한 제품 속성" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "이 제품이 포함된 상위 주문 참조" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "상위 주문" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "이 주문 라인과 연결된 특정 제품" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "이 특정 제품의 주문 수량" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "제품 수량" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "이 제품의 현재 상태 순서" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "제품 라인 상태" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "주문제품에는 연결된 주문이 있어야 합니다!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "피드백에 지정된 작업이 잘못되었습니다: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "받지 않은 주문에 대해서는 피드백을 제공할 수 없습니다." -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "이름" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "통합 URL" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "인증 자격 증명" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "기본 CRM 공급업체는 하나만 사용할 수 있습니다." -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "주문의 CRM 링크" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "주문의 CRM 링크" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2295,15 +2303,15 @@ msgstr "" "수 있는 기능을 제공합니다. 연결된 주문 상품, 다운로드 횟수, 자산이 공개적으로 표시되는지 여부에 대한 정보를 유지 관리합니다. " "여기에는 연결된 주문이 완료 상태일 때 자산을 다운로드할 수 있는 URL을 생성하는 메서드가 포함되어 있습니다." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "다운로드" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "다운로드" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2315,60 +2323,52 @@ msgstr "" "설계되었습니다. 여기에는 사용자 댓글, 주문에서 관련 제품에 대한 참조 및 사용자가 지정한 등급을 저장하는 속성이 포함되어 있습니다. 이" " 클래스는 데이터베이스 필드를 사용하여 피드백 데이터를 효과적으로 모델링하고 관리합니다." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "제품 사용 경험에 대한 사용자 제공 의견" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "피드백 댓글" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "이 피드백에 대한 순서대로 특정 제품을 참조합니다." -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "관련 주문 제품" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "제품에 대한 사용자 지정 평점" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "제품 평가" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "피드백을 추가하려면 댓글, 평점, 주문 제품 고유번호를 제공해야 합니다." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "프로모코드 생성 중 오류가 발생했습니다: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "홈" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "문의하기" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "회사 소개" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "결제 정보" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "배달" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2534,11 +2534,11 @@ msgstr "" "모든 권리\n" " 예약됨" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "데이터와 시간 초과가 모두 필요합니다." -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "잘못된 시간 초과 값, 0~216000초 사이여야 합니다." @@ -2570,7 +2570,7 @@ msgstr "이 작업을 수행할 수 있는 권한이 없습니다." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!" @@ -2624,15 +2624,23 @@ msgstr "글로벌 검색 쿼리를 처리합니다." msgid "Handles the logic of buying as a business without registration." msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "주문_제품_UUID는 필수입니다." + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다." -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "주문 제품에 제품이 없습니다." + +#: core/views.py:359 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." @@ -2640,11 +2648,11 @@ msgstr "" "주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" "이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "파비콘을 찾을 수 없습니다." -#: core/views.py:370 +#: core/views.py:376 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." @@ -2652,7 +2660,7 @@ msgstr "" "웹사이트의 파비콘 요청을 처리합니다.\n" "이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2661,7 +2669,11 @@ msgstr "" "요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " "리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "현재 버전의 eVibes를 반환합니다." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2673,7 +2685,7 @@ msgstr "" "Evibes 엔티티에 대한 액션 및 연산을 처리하는 기능을 제공합니다. 여기에는 현재 작업을 기반으로 하는 동적 직렬화기 클래스, 사용자" " 지정 가능한 권한 및 렌더링 형식에 대한 지원이 포함됩니다." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2685,7 +2697,7 @@ msgstr "" "처리합니다. 이 클래스는 애플리케이션의 API 계층의 일부이며 AttributeGroup 데이터에 대한 요청 및 응답을 처리하는 표준화된" " 방법을 제공합니다." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2698,7 +2710,7 @@ msgstr "" "클래스는 속성 개체의 쿼리, 필터링 및 직렬화를 관리하여 특정 필드별로 필터링하거나 요청에 따라 단순화된 정보와 상세한 정보를 검색하는 " "등 반환되는 데이터를 동적으로 제어할 수 있도록 합니다." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2710,7 +2722,7 @@ msgstr "" "기능을 제공합니다. 이 뷰셋은 장고 REST 프레임워크의 뷰셋 메커니즘과 통합되며 다양한 작업에 적절한 직렬화기를 사용합니다. 필터링 " "기능은 DjangoFilterBackend를 통해 제공됩니다." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2722,7 +2734,7 @@ msgstr "" "역할을 담당합니다. 카테고리 데이터 검색, 필터링 및 직렬화를 지원합니다. 또한 이 뷰 집합은 권한이 부여된 사용자만 특정 데이터에 " "액세스할 수 있도록 권한을 적용합니다." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2732,7 +2744,7 @@ msgstr "" "브랜드 인스턴스를 관리하기 위한 뷰셋을 나타냅니다. 이 클래스는 브랜드 객체를 쿼리, 필터링 및 직렬화하기 위한 기능을 제공합니다. 이 " "클래스는 장고의 뷰셋 프레임워크를 사용하여 브랜드 객체에 대한 API 엔드포인트의 구현을 간소화합니다." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2747,7 +2759,7 @@ msgstr "" "API 작업을 위해 Django REST 프레임워크와 통합됩니다. 제품 세부 정보 검색, 권한 적용, 제품의 관련 피드백에 액세스하는 " "메서드가 포함되어 있습니다." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2759,7 +2771,7 @@ msgstr "" " 처리하는 데 사용되는 쿼리 집합, 필터 구성 및 직렬화기 클래스를 정의합니다. 이 클래스의 목적은 Django REST 프레임워크를 " "통해 공급업체 관련 리소스에 대한 간소화된 액세스를 제공하는 것입니다." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2773,7 +2785,7 @@ msgstr "" "구현하는 것입니다. 이 클래스는 기본 `EvibesViewSet`을 확장하고 데이터 쿼리를 위해 Django의 필터링 시스템을 " "사용합니다." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2788,7 +2800,7 @@ msgstr "" "엔드포인트가 포함되어 있습니다. 뷰셋은 수행되는 특정 작업에 따라 여러 직렬화기를 사용하며 주문 데이터와 상호 작용하는 동안 그에 따라 " "권한을 적용합니다." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2800,25 +2812,25 @@ msgstr "" "수행할 수 있습니다. 여기에는 요청된 작업을 기반으로 필터링, 권한 확인 및 직렬화기 전환이 포함됩니다. 또한 주문 제품 인스턴스에 대한" " 피드백 처리를 위한 세부 작업도 제공합니다." -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "애플리케이션에서 제품 이미지와 관련된 작업을 관리합니다." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "다양한 API 작업을 통해 프로모션 코드 인스턴스의 검색 및 처리를 관리합니다." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "프로모션을 관리하기 위한 보기 세트를 나타냅니다." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "시스템에서 주식 데이터와 관련된 작업을 처리합니다." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2832,7 +2844,7 @@ msgstr "" "내의 제품을 검색, 수정 및 사용자 지정할 수 있도록 합니다. 이 뷰셋은 위시리스트 제품에 대한 추가, 제거 및 대량 작업과 같은 기능을" " 용이하게 합니다. 명시적인 권한이 부여되지 않는 한 사용자가 자신의 위시리스트만 관리할 수 있도록 권한 검사가 통합되어 있습니다." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2844,12 +2856,12 @@ msgstr "" "사용자 정의 작업을 가능하게 합니다. 여기에는 다양한 HTTP 메서드, 직렬화기 재정의, 요청 컨텍스트에 따른 권한 처리를 위한 특수 " "동작이 포함되어 있습니다." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "지오코딩 오류입니다: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo index 7e9107b98f6997d7f5b759ef6c37a1015b5cdb73..6ba484c12e64045474a04cc25349caf9bf1ce720 100644 GIT binary patch delta 13092 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 I_KXksFCQ0Awg3PC diff --git a/core/locale/nl_NL/LC_MESSAGES/django.po b/core/locale/nl_NL/LC_MESSAGES/django.po index f074b693..a26148b3 100644 --- a/core/locale/nl_NL/LC_MESSAGES/django.po +++ b/core/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -108,7 +108,7 @@ msgstr "Afbeelding" msgid "images" msgstr "Afbeeldingen" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Voorraad" @@ -116,11 +116,11 @@ msgstr "Voorraad" msgid "stocks" msgstr "Aandelen" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Product bestellen" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Producten bestellen" @@ -128,7 +128,7 @@ msgstr "Producten bestellen" msgid "children" msgstr "Kinderen" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Config" @@ -180,7 +180,7 @@ msgstr "Momental" msgid "successful" msgstr "Succesvol" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -204,7 +204,7 @@ msgstr "Verkrijg de blootstelbare parameters van de applicatie" msgid "send a message to the support team" msgstr "Stuur een bericht naar het ondersteuningsteam" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Vraag een CORSed URL op. Alleen https toegestaan." @@ -449,7 +449,7 @@ msgstr "" "wordt de aankoop afgerond met het saldo van de gebruiker; als " "`force_payment` wordt gebruikt, wordt een transactie gestart." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "een bestelling kopen zonder een account aan te maken" @@ -757,273 +757,273 @@ msgstr "een order-productrelatie verwijderen" msgid "add or remove feedback on an order–product relation" msgstr "feedback toevoegen of verwijderen op een order-productrelatie" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Geen zoekterm opgegeven." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Zoek op" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Naam" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Categorieën" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Categorieën Naaktslakken" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Min Prijs" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Maximale prijs" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Is actief" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Merk" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Attributen" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Hoeveelheid" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Slak" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Is digitaal" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Subcategorieën opnemen" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Inclusief persoonlijk bestelde producten" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Er moet een categorie_uuid zijn om include_subcategories vlag te gebruiken" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Zoeken (ID, productnaam of onderdeelnummer)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Gekocht na (inclusief)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Eerder gekocht (inclusief)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "E-mail gebruiker" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "Gebruiker UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Menselijk leesbare ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Ouder" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Hele categorie (heeft minstens 1 product of niet)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Niveau" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Product UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Sleutel om te zoeken of te plaatsen in de cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Gegevens om op te slaan in de cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Time-out in seconden om de gegevens in de cache te plaatsen" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Gecachte gegevens" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-gegevens van de opgevraagde URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Een product aan de bestelling toevoegen" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Bestelling {order_uuid} niet gevonden!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Alle producten uit de bestelling verwijderen" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Een bestelling kopen" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Geef order_uuid of order_hr_id - wederzijds exclusief!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Een actie uitvoeren op een lijst met producten in de bestelling" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Verwijderen/toevoegen" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "De actie moet \"toevoegen\" of \"verwijderen\" zijn!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Een actie uitvoeren op een lijst met producten in het verlanglijstje" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Geef de waarde `wishlist_uuid` op." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "wens {wishlist_uuid} niet gevonden!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Een product aan de bestelling toevoegen" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Een product uit de bestelling verwijderen" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Een bestelling kopen" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Stuur de attributen als de string opgemaakt als attr1=waarde1,attr2=waarde2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Feedback toevoegen of verwijderen voor het orderproduct" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "De actie moet `toevoegen` of `verwijderen` zijn!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} niet gevonden!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Originele adresstring geleverd door de gebruiker" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limiet moet tussen 1 en 10 liggen" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - werkt als een charme" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Attributen" @@ -1036,11 +1036,11 @@ msgid "groups of attributes" msgstr "Groepen van kenmerken" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Categorieën" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Merken" @@ -1049,7 +1049,7 @@ msgid "category image url" msgstr "Categorieën" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Opwaarderingspercentage" @@ -1074,7 +1074,7 @@ msgstr "Tags voor deze categorie" msgid "products in this category" msgstr "Producten in deze categorie" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Verkopers" @@ -1099,7 +1099,7 @@ msgid "represents feedback from a user." msgstr "Vertegenwoordigt feedback van een gebruiker." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Meldingen" @@ -1107,7 +1107,7 @@ msgstr "Meldingen" msgid "download url for this order product if applicable" msgstr "Download url voor dit bestelproduct indien van toepassing" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Feedback" @@ -1115,7 +1115,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Een lijst met bestelde producten in deze bestelling" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Factuuradres" @@ -1143,7 +1143,7 @@ msgstr "Zijn alle producten in de bestelling digitaal" msgid "transactions for this order" msgstr "Transacties voor deze bestelling" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Bestellingen" @@ -1155,19 +1155,19 @@ msgstr "Afbeelding URL" msgid "product's images" msgstr "Afbeeldingen van het product" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Reacties" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Merk" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Attribuutgroepen" @@ -1195,7 +1195,7 @@ msgstr "Aantal terugkoppelingen" msgid "only available for personal orders" msgstr "Producten alleen beschikbaar voor persoonlijke bestellingen" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Producten" @@ -1207,15 +1207,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Producten te koop" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promoties" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Verkoper" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1223,11 +1223,11 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Gewenste producten" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Verlanglijst" @@ -1235,7 +1235,7 @@ msgstr "Verlanglijst" msgid "tagged products" msgstr "Getagde producten" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Product tags" @@ -1322,7 +1322,7 @@ msgstr "Producten zoekresultaten" msgid "posts search results" msgstr "Zoekresultaten" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1335,23 +1335,23 @@ msgstr "" "hiërarchische structuur vormt. Dit kan nuttig zijn voor het categoriseren en" " effectiever beheren van attributen in een complex systeem." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Ouder van deze groep" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Ouderattribuutgroep" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Naam attribuutgroep" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Attribuutgroep" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1370,42 +1370,50 @@ msgstr "" "metadata en beperkingen, waardoor het geschikt is voor gebruik in systemen " "die communiceren met externe verkopers." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Slaat referenties en eindpunten op die vereist zijn voor API-communicatie " "van de verkoper" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Authenticatie-info" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definieer de opmaak voor producten die zijn opgehaald bij deze leverancier" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Verkoper winstpercentage" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Naam van deze verkoper" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Naam verkoper" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "responsbestand" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "laatste verwerkingsreactie van verkoper" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Pad integratiebestand verkoper" + +#: core/models.py:154 +msgid "integration path" +msgstr "Integratie pad" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1420,27 +1428,27 @@ msgstr "" "ondersteunt bewerkingen die geëxporteerd worden door mixins en biedt " "aanpassing van metadata voor administratieve doeleinden." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Interne tagidentifier voor de producttag" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tag naam" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Gebruiksvriendelijke naam voor de producttag" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Tag weergavenaam" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Productlabel" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1451,15 +1459,15 @@ msgstr "" "associëren en te classificeren. Ze bevat attributen voor een interne " "tagidentifier en een gebruiksvriendelijke weergavenaam." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "categorie tag" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "categorie tags" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1482,51 +1490,51 @@ msgstr "" " kunnen specificeren en attributen zoals afbeeldingen, tags of prioriteit " "kunnen toekennen." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Upload een afbeelding die deze categorie vertegenwoordigt" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Categorie afbeelding" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Definieer een toeslagpercentage voor producten in deze categorie" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Ouder van deze categorie om een hiërarchische structuur te vormen" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Oudercategorie" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Naam categorie" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Geef deze categorie een naam" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Voeg een gedetailleerde beschrijving toe voor deze categorie" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Categorie beschrijving" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tags die deze categorie helpen beschrijven of groeperen" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioriteit" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1540,47 +1548,47 @@ msgstr "" "prioriteitsvolgorde. Hiermee kunnen merkgerelateerde gegevens worden " "georganiseerd en weergegeven in de applicatie." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Naam van dit merk" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Merknaam" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Upload een logo dat dit merk vertegenwoordigt" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Klein merkimago" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Upload een groot logo dat dit merk vertegenwoordigt" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Groot merkimago" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Een gedetailleerde beschrijving van het merk toevoegen" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Merknaam" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Optionele categorieën waarmee dit merk wordt geassocieerd" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Categorieën" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1597,68 +1605,68 @@ msgstr "" "evalueren van beschikbare producten van verschillende leveranciers mogelijk " "te maken." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Verkoopprijs" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Bijbehorend product" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "De prijs die voor dit product aan de verkoper is betaald" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Verkoper SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digitaal bestand" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Voorraadboekingen" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1679,51 +1687,51 @@ msgstr "" "verbeteren. Het wordt gebruikt om productgegevens en de bijbehorende " "informatie te definiëren en te manipuleren binnen een applicatie." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Categorie waartoe dit product behoort" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Dit product optioneel koppelen aan een merk" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Geeft aan of dit product digitaal wordt geleverd" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Is product digitaal" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Zorg voor een duidelijke identificerende naam voor het product" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Naam product" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Productbeschrijving" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Onderdeelnummer voor dit product" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Onderdeelnummer" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Voorraadhoudende eenheid voor dit product" @@ -1792,11 +1800,11 @@ msgstr "Naam van dit kenmerk" msgid "attribute's name" msgstr "Naam attribuut" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "kan worden gefilterd" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Welke attributen en waarden kunnen worden gebruikt om deze categorie te " @@ -1857,27 +1865,27 @@ msgstr "Alt-tekst afbeelding" msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Product afbeelding" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Prioriteit weergeven" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Product afbeeldingen" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1894,39 +1902,39 @@ msgstr "" "integreert met de productcatalogus om de betreffende artikelen in de " "campagne te bepalen." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Kortingspercentage" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Naam promotie" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Promotie beschrijving" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Meegeleverde producten" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promotie" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1939,23 +1947,23 @@ msgstr "" "toevoegen en verwijderen van producten, maar ook bewerkingen voor het " "toevoegen en verwijderen van meerdere producten tegelijk." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Verlanglijst" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1972,19 +1980,19 @@ msgstr "" "Het breidt functionaliteit uit van specifieke mixins en biedt extra " "aangepaste functies." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documentaire" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Onopgelost" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -2005,59 +2013,59 @@ msgstr "" "klasse maakt het ook mogelijk om een adres met een gebruiker te associëren, " "wat het verwerken van gepersonaliseerde gegevens vergemakkelijkt." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Adresregel voor de klant" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Adresregel" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Straat" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "District" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Stad" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Regio" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Postcode" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Land" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocatie Punt (lengtegraad, breedtegraad)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Volledig JSON-antwoord van geocoder voor dit adres" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Opgeslagen JSON-antwoord van de geocoderingsservice" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adres" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adressen" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2075,76 +2083,76 @@ msgstr "" "te valideren en toe te passen op een bestelling, waarbij ervoor wordt " "gezorgd dat aan de beperkingen wordt voldaan." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Unieke code die een gebruiker gebruikt om een korting te verzilveren" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Promo code identificatie" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Kortingspercentage dat wordt toegepast als het vaste bedrag niet wordt " "gebruikt" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Kortingspercentage" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tijdstempel wanneer de promocode werd gebruikt, leeg indien nog niet " "gebruikt" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Kortingscode" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Actiecodes" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2152,16 +2160,16 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2179,141 +2187,141 @@ msgstr "" "bijgewerkt. De functionaliteit ondersteunt ook het beheer van de producten " "in de levenscyclus van de bestelling." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Het factuuradres dat voor deze bestelling is gebruikt" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Optionele promotiecode toegepast op deze bestelling" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Kortingscode toegepast" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Het verzendadres dat voor deze bestelling is gebruikt" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Verzendadres" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Huidige status van de order in zijn levenscyclus" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Bestelstatus" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON-structuur van meldingen om weer te geven aan gebruikers, in admin UI " "wordt de tabelweergave gebruikt" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON-weergave van bestelattributen voor deze bestelling" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "De gebruiker die de bestelling heeft geplaatst" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Gebruiker" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "De tijdstempel waarop de bestelling is afgerond" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Tijd kopen" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Een menselijk leesbare identificatiecode voor de bestelling" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "menselijk leesbare ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Bestel" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Een gebruiker mag maar één lopende order tegelijk hebben!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "U kunt geen producten toevoegen aan een bestelling die niet in behandeling " "is." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Je kunt niet meer producten toevoegen dan er op voorraad zijn" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "Je kunt alleen fysieke producten kopen met opgegeven verzendadres!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adres bestaat niet" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "U kunt op dit moment niet kopen. Probeer het over een paar minuten nog eens." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Een gebruiker zonder saldo kan niet kopen met saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2321,7 +2329,7 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2329,7 +2337,7 @@ msgstr "" "Ongeldige betalingsmethode: {payment_method} van " "{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2352,110 +2360,110 @@ msgstr "" "digitale producten. Het model integreert met de modellen Order en Product en" " slaat een verwijzing ernaar op." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "De prijs die de klant bij aankoop voor dit product heeft betaald" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Interne opmerkingen" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Ouderlijk bevel" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Hoeveelheid product" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status productlijn" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct moet een bijbehorende order hebben!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Verkeerde actie opgegeven voor feedback: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" "U kunt geen producten verwijderen uit een bestelling die niet in behandeling" " is." -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Naam" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL van de integratie" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Authenticatiegegevens" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Je kunt maar één standaard CRM-provider hebben" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM's" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "CRM link van bestelling" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "CRM-koppelingen voor bestellingen" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2472,15 +2480,15 @@ msgstr "" "om een URL te genereren voor het downloaden van de activa wanneer de " "bijbehorende order een voltooide status heeft." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Downloaden" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Downloads" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2496,64 +2504,56 @@ msgstr "" "gebruikt databasevelden om feedbackgegevens effectief te modelleren en te " "beheren." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Opmerkingen van gebruikers over hun ervaring met het product" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Reacties" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Verwijst naar het specifieke product in een bestelling waar deze feedback " "over gaat" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Gerelateerd product bestellen" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Door de gebruiker toegekende waardering voor het product" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Productbeoordeling" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Om feedback toe te voegen, moet je een opmerking, beoordeling en " "productidentificatie opgeven." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Fout tijdens aanmaken promocode: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Home" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Neem contact met ons op" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Over ons" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Betalingsinformatie" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Levering" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2729,11 +2729,11 @@ msgstr "" "alle rechten\n" " voorbehouden" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Zowel gegevens als time-out zijn vereist" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Ongeldige time-outwaarde, deze moet tussen 0 en 216000 seconden liggen" @@ -2766,7 +2766,7 @@ msgstr "U hebt geen toestemming om deze actie uit te voeren." msgid "NOMINATIM_URL must be configured." msgstr "De parameter NOMINATIM_URL moet worden geconfigureerd!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2829,17 +2829,25 @@ msgstr "Handelt globale zoekopdrachten af." msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt de logica van kopen als bedrijf zonder registratie." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid is vereist" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "U kunt het digitale goed maar één keer downloaden" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "" "de bestelling moet worden betaald voordat het digitale actief kan worden " "gedownload" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Het bestelde product heeft geen product" + +#: core/views.py:359 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." @@ -2847,11 +2855,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon niet gevonden" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2859,7 +2867,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2870,7 +2878,11 @@ msgstr "" "Django admin-interface. Het gebruikt Django's `redirect` functie voor het " "afhandelen van de HTTP-omleiding." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Geeft als resultaat de huidige versie van eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2884,7 +2896,7 @@ msgstr "" "ondersteuning voor dynamische serializer klassen op basis van de huidige " "actie, aanpasbare machtigingen, en rendering formaten." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2898,7 +2910,7 @@ msgstr "" "laag van de applicatie en biedt een gestandaardiseerde manier om verzoeken " "en reacties voor AttributeGroup-gegevens te verwerken." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2915,7 +2927,7 @@ msgstr "" " gedetailleerde versus vereenvoudigde informatie afhankelijk van het " "verzoek." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2929,7 +2941,7 @@ msgstr "" "viewset mechanismen en gebruikt passende serializers voor verschillende " "acties. Filtermogelijkheden worden geleverd door de DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2944,7 +2956,7 @@ msgstr "" "rechten af om ervoor te zorgen dat alleen bevoegde gebruikers toegang hebben" " tot specifieke gegevens." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2956,7 +2968,7 @@ msgstr "" "Merk objecten. Het gebruikt Django's ViewSet framework om de implementatie " "van API endpoints voor Merk objecten te vereenvoudigen." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2975,7 +2987,7 @@ msgstr "" "machtigingen en het verkrijgen van toegang tot gerelateerde feedback over " "een product." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2990,7 +3002,7 @@ msgstr "" " van deze klasse is om gestroomlijnde toegang te bieden tot Vendor-" "gerelateerde bronnen via het Django REST framework." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -3007,7 +3019,7 @@ msgstr "" "implementeren. Het breidt de basis `EvibesViewSet` uit en maakt gebruik van " "Django's filtersysteem voor het opvragen van gegevens." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3027,7 +3039,7 @@ msgstr "" "gebaseerd op de specifieke actie die wordt uitgevoerd en dwingt " "dienovereenkomstig permissies af tijdens de interactie met ordergegevens." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3042,12 +3054,12 @@ msgstr "" " een gedetailleerde actie voor het afhandelen van feedback op OrderProduct " "instanties" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" "Beheert bewerkingen met betrekking tot productafbeeldingen in de applicatie." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3055,16 +3067,16 @@ msgstr "" "Beheert het ophalen en afhandelen van PromoCode-instanties via verschillende" " API-acties." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Vertegenwoordigt een view set voor het beheren van promoties." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "" "Verwerkt bewerkingen met betrekking tot voorraadgegevens in het systeem." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3083,7 +3095,7 @@ msgstr "" "verlanglijstjes kunnen beheren, tenzij er expliciete toestemmingen zijn " "verleend." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3097,12 +3109,12 @@ msgstr "" "gespecialiseerde gedragingen voor verschillende HTTP methoden, serializer " "omzeilingen en toestemmingsafhandeling gebaseerd op de verzoekcontext." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fout bij geocodering: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/no_NO/LC_MESSAGES/django.mo b/core/locale/no_NO/LC_MESSAGES/django.mo index ec8af0723dba096942a667791bb48927a24e2626..5ec7439b363882704325b0d5b129bda8a7504250 100644 GIT binary patch delta 13078 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 delta 12820 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 diff --git a/core/locale/no_NO/LC_MESSAGES/django.po b/core/locale/no_NO/LC_MESSAGES/django.po index 0118e5c7..d00fb4dd 100644 --- a/core/locale/no_NO/LC_MESSAGES/django.po +++ b/core/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -109,7 +109,7 @@ msgstr "Bilde" msgid "images" msgstr "Bilder" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Lager" @@ -117,11 +117,11 @@ msgstr "Lager" msgid "stocks" msgstr "Aksjer" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Bestill produkt" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Bestill produkter" @@ -129,7 +129,7 @@ msgstr "Bestill produkter" msgid "children" msgstr "Barn" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfigurer" @@ -181,7 +181,7 @@ msgstr "Momental" msgid "successful" msgstr "Vellykket" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -205,7 +205,7 @@ msgstr "Hent applikasjonens eksponerbare parametere" msgid "send a message to the support team" msgstr "Send en melding til supportteamet" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Be om en CORSed URL. Bare https er tillatt." @@ -444,7 +444,7 @@ msgstr "" "hjelp av brukerens saldo; hvis `force_payment` brukes, iverksettes en " "transaksjon." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "kjøpe en ordre uten å opprette konto" @@ -743,274 +743,274 @@ msgstr "slette en ordre-produkt-relasjon" msgid "add or remove feedback on an order–product relation" msgstr "legge til eller fjerne tilbakemeldinger på en ordre-produkt-relasjon" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Ingen søkeord oppgitt." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Søk" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Navn" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorier Snegler" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tagger" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Min pris" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Maks pris" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Er aktiv" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Merkevare" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Egenskaper" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Antall" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Snegl" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Er Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Inkluder underkategorier" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Inkluder personlig bestilte produkter" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Det må finnes en category_uuid for å bruke include_subcategories-flagget" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Søk (ID, produktnavn eller delenummer)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Kjøpt etter (inklusive)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Kjøpt før (inkludert)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Brukerens e-post" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "Bruker UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Menneskelig lesbar ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Foreldre" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Hele kategorien (har minst 1 produkt eller ikke)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Nivå" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Produkt UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nøkkel å lete etter i eller legge inn i hurtigbufferen" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data som skal lagres i hurtigbufferen" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Tidsavbrudd i sekunder for å legge inn data i hurtigbufferen" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Bufret data" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-data fra den forespurte URL-en" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Bare nettadresser som begynner med http(s):// er tillatt" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Legg til et produkt i bestillingen" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Ordre {order_uuid} ikke funnet!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Fjern alle produktene fra bestillingen" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Kjøp en ordre" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vennligst oppgi enten order_uuid eller order_hr_id - gjensidig utelukkende!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Feil type kom fra order.buy()-metoden: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Utfør en handling på en liste over produkter i bestillingen" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Fjern/legg til" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Handlingen må enten være \"legg til\" eller \"fjern\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Utføre en handling på en liste over produkter i ønskelisten" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vennligst oppgi verdien `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Ønskeliste {wishlist_uuid} ikke funnet!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Legg til et produkt i bestillingen" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Fjern et produkt fra bestillingen" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Kjøp en ordre" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Send attributtene som en streng formatert som attr1=verdi1,attr2=verdi2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Legg til eller slett en tilbakemelding for ordreproduktet" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Handlingen må være enten `add` eller `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Bestill produkt {order_product_uuid} ikke funnet!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Opprinnelig adressestreng oppgitt av brukeren" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Grensen må være mellom 1 og 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerer som en drøm" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Egenskaper" @@ -1023,11 +1023,11 @@ msgid "groups of attributes" msgstr "Grupper av attributter" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Merkevarer" @@ -1036,7 +1036,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Påslag i prosent" @@ -1061,7 +1061,7 @@ msgstr "Tagger for denne kategorien" msgid "products in this category" msgstr "Produkter i denne kategorien" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Leverandører" @@ -1086,7 +1086,7 @@ msgid "represents feedback from a user." msgstr "Representerer tilbakemeldinger fra en bruker." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Varsler" @@ -1094,7 +1094,7 @@ msgstr "Varsler" msgid "download url for this order product if applicable" msgstr "Last ned url for dette bestillingsproduktet, hvis aktuelt" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Tilbakemeldinger" @@ -1102,7 +1102,7 @@ msgstr "Tilbakemeldinger" msgid "a list of order products in this order" msgstr "En liste over bestillingsprodukter i denne rekkefølgen" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Faktureringsadresse" @@ -1130,7 +1130,7 @@ msgstr "Er alle produktene i bestillingen digitale" msgid "transactions for this order" msgstr "Transaksjoner for denne bestillingen" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Bestillinger" @@ -1142,19 +1142,19 @@ msgstr "Bilde-URL" msgid "product's images" msgstr "Bilder av produktet" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Tilbakemeldinger" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Merkevare" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Attributtgrupper" @@ -1182,7 +1182,7 @@ msgstr "Antall tilbakemeldinger" msgid "only available for personal orders" msgstr "Produkter kun tilgjengelig for personlige bestillinger" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produkter" @@ -1194,15 +1194,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på salg" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Leverandør" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1210,11 +1210,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Ønskelister" @@ -1222,7 +1222,7 @@ msgstr "Ønskelister" msgid "tagged products" msgstr "Merkede produkter" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Produktmerker" @@ -1307,7 +1307,7 @@ msgstr "Søkeresultater for produkter" msgid "posts search results" msgstr "Søkeresultater for produkter" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1320,23 +1320,23 @@ msgstr "" "struktur. Dette kan være nyttig for å kategorisere og administrere " "attributter på en mer effektiv måte i et komplekst system." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Foreldre til denne gruppen" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Overordnet attributtgruppe" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Attributtgruppens navn" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Attributtgruppe" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1355,41 +1355,49 @@ msgstr "" "som gjør den egnet for bruk i systemer som samhandler med " "tredjepartsleverandører." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrer legitimasjon og endepunkter som kreves for leverandørens API-" "kommunikasjon" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Autentiseringsinformasjon" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Definer påslag for produkter som hentes fra denne leverandøren" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Leverandørens påslagsprosent" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Navn på denne leverandøren" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Leverandørens navn" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "svarfil" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "leverandørens siste behandlingssvar" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Leverandørens integrasjonsfilbane" + +#: core/models.py:154 +msgid "integration path" +msgstr "Integreringsvei" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1404,27 +1412,27 @@ msgstr "" "operasjoner som eksporteres gjennom mixins, og gir metadatatilpasning for " "administrative formål." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Intern tagg-identifikator for produkttaggen" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tagg navn" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Brukervennlig navn for produkttaggen" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Visningsnavn for taggen" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Produktmerke" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1435,15 +1443,15 @@ msgstr "" "produkter. Den inneholder attributter for en intern tagg-identifikator og et" " brukervennlig visningsnavn." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "kategorimerke" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "kategorikoder" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1465,51 +1473,51 @@ msgstr "" "spesifisere navn, beskrivelse og hierarki for kategoriene, samt tildele " "attributter som bilder, tagger eller prioritet." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Last opp et bilde som representerer denne kategorien" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Kategori bilde" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Definer en påslagsprosent for produkter i denne kategorien" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Overordnet til denne kategorien for å danne en hierarkisk struktur" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Overordnet kategori" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Navn på kategori" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Oppgi et navn for denne kategorien" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Legg til en detaljert beskrivelse for denne kategorien" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Beskrivelse av kategori" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tagger som bidrar til å beskrive eller gruppere denne kategorien" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioritet" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1523,47 +1531,47 @@ msgstr "" "prioriteringsrekkefølge. Den gjør det mulig å organisere og representere " "merkerelaterte data i applikasjonen." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Navnet på dette merket" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Merkenavn" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Last opp en logo som representerer dette varemerket" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Merkevare lite image" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Last opp en stor logo som representerer dette varemerket" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Merkevare med stort image" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Legg til en detaljert beskrivelse av merket" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Varemerkebeskrivelse" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Valgfrie kategorier som dette merket er assosiert med" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1579,68 +1587,68 @@ msgstr "" "lagerstyringssystemet for å muliggjøre sporing og evaluering av produkter " "som er tilgjengelige fra ulike leverandører." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Leverandøren som leverer dette produktet lagerfører" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Sluttpris til kunden etter påslag" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Salgspris" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Produktet som er knyttet til denne lagerposten" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Tilhørende produkt" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Prisen som er betalt til leverandøren for dette produktet" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Leverandørens innkjøpspris" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Tilgjengelig mengde av produktet på lager" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Antall på lager" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørens SKU for identifisering av produktet" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til denne aksjen, hvis aktuelt" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digital fil" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Lageroppføringer" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1661,51 +1669,51 @@ msgstr "" "ytelsen. Den brukes til å definere og manipulere produktdata og tilhørende " "informasjon i en applikasjon." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Kategori dette produktet tilhører" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Du kan eventuelt knytte dette produktet til et varemerke" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tagger som bidrar til å beskrive eller gruppere dette produktet" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Angir om dette produktet leveres digitalt" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Er produktet digitalt" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Gi produktet et tydelig navn som identifiserer det" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Produktnavn" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Legg til en detaljert beskrivelse av produktet" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Produktbeskrivelse" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Delenummer for dette produktet" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Delenummer" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Lagerholdsenhet for dette produktet" @@ -1773,11 +1781,11 @@ msgstr "Navn på dette attributtet" msgid "attribute's name" msgstr "Attributtets navn" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "er filtrerbar" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Hvilke attributter og verdier som kan brukes til å filtrere denne " @@ -1836,27 +1844,27 @@ msgstr "Alt-tekst til bilder" msgid "upload the image file for this product" msgstr "Last opp bildefilen for dette produktet" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Produktbilde" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Bestemmer rekkefølgen bildene skal vises i" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Prioritet på skjermen" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Produktet som dette bildet representerer" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Produktbilder" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1872,39 +1880,39 @@ msgstr "" "produktene. Den integreres med produktkatalogen for å finne de berørte " "varene i kampanjen." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Prosentvis rabatt for de valgte produktene" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Rabattprosent" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Oppgi et unikt navn for denne kampanjen" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Navn på kampanjen" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Beskrivelse av kampanjen" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Velg hvilke produkter som er inkludert i denne kampanjen" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Inkluderte produkter" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Markedsføring" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1916,23 +1924,23 @@ msgstr "" "produkter, og støtter operasjoner som å legge til og fjerne produkter, samt " "operasjoner for å legge til og fjerne flere produkter samtidig." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produkter som brukeren har merket som ønsket" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Bruker som eier denne ønskelisten" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Ønskelistens eier" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1948,19 +1956,19 @@ msgstr "" "utvider funksjonaliteten fra spesifikke mixins og tilbyr flere tilpassede " "funksjoner." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Dokumentarfilmer" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Uavklart" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1981,59 +1989,59 @@ msgstr "" " å knytte en adresse til en bruker, noe som gjør det enklere å tilpasse " "datahåndteringen." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Adresselinje for kunden" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Adresselinje" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Gate" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Distrikt" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "By" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Postnummer" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Land" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt(lengdegrad, breddegrad)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Fullstendig JSON-svar fra geokoderen for denne adressen" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Lagret JSON-svar fra geokodingstjenesten" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adresse" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresser" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2050,73 +2058,73 @@ msgstr "" "kampanjekoden på en bestilling, samtidig som den sikrer at begrensningene er" " oppfylt." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Unik kode som brukes av en bruker for å løse inn en rabatt" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Kampanjekode-identifikator" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbeløp som brukes hvis prosent ikke brukes" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Fast rabattbeløp" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Prosentvis rabatt hvis fast beløp ikke brukes" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Prosentvis rabatt" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Tidsstempel for når kampanjekoden utløper" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Slutt gyldighetstid" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel som denne kampanjekoden er gyldig fra" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Start gyldighetstid" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tidsstempel for når kampanjekoden ble brukt, tomt hvis den ikke er brukt " "ennå" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Tidsstempel for bruk" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Bruker som er tilordnet denne kampanjekoden, hvis aktuelt" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Tilordnet bruker" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Kampanjekode" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Kampanjekoder" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2124,16 +2132,16 @@ msgstr "" "Bare én type rabatt skal defineres (beløp eller prosent), men ikke begge " "eller ingen av delene." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promokoden har allerede blitt brukt" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for kampanjekode {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2150,140 +2158,140 @@ msgstr "" "kan oppdateres. På samme måte støtter funksjonaliteten håndtering av " "produktene i bestillingens livssyklus." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Faktureringsadressen som brukes for denne bestillingen" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Valgfri kampanjekode brukt på denne bestillingen" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Anvendt kampanjekode" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Leveringsadressen som brukes for denne bestillingen" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Leveringsadresse" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Ordrens nåværende status i livssyklusen" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Order status" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur for varsler som skal vises til brukere, i admin-grensesnittet " "brukes tabellvisningen" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON-representasjon av ordreattributter for denne ordren" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Brukeren som har lagt inn bestillingen" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Bruker" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Tidsstempel for når bestillingen ble fullført" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Kjøp tid" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "En menneskelig lesbar identifikator for bestillingen" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID som kan leses av mennesker" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Bestilling" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "En bruker kan bare ha én ventende ordre om gangen!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Du kan ikke legge til produkter i en bestilling som ikke er en pågående " "bestilling" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Du kan ikke legge til inaktive produkter i bestillingen" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" "Du kan ikke legge til flere produkter enn det som er tilgjengelig på lager" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Du kan ikke fjerne produkter fra en bestilling som ikke er en pågående " "bestilling" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finnes ikke med spørring <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promokoden finnes ikke" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan bare kjøpe fysiske produkter med oppgitt leveringsadresse!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adressen eksisterer ikke" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Du kan ikke kjøpe for øyeblikket, vennligst prøv igjen om noen minutter." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Ugyldig kraftverdi" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke kjøpe en tom ordre!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Du kan ikke kjøpe en ordre uten en bruker!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "En bruker uten saldo kan ikke kjøpe med saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Utilstrekkelige midler til å fullføre bestillingen" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2291,14 +2299,14 @@ msgstr "" "du kan ikke kjøpe uten registrering, vennligst oppgi følgende informasjon: " "kundenavn, kundens e-postadresse, kundens telefonnummer" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ugyldig betalingsmetode: {payment_method} fra {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2321,109 +2329,109 @@ msgstr "" "Modellen integreres med Order- og Product-modellene og lagrer en referanse " "til disse." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Prisen kunden betalte for dette produktet på kjøpstidspunktet" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Innkjøpspris på bestillingstidspunktet" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer for administratorer om dette bestilte produktet" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Brukervarsler" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON-representasjon av dette elementets attributter" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Bestilte produktegenskaper" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "" "Referanse til den overordnede bestillingen som inneholder dette produktet" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Overordnet ordre" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Det spesifikke produktet som er knyttet til denne ordrelinjen" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Antall av dette spesifikke produktet i bestillingen" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Produktmengde" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Nåværende status for dette produktet i bestillingen" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status for produktlinjen" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct må ha en tilknyttet ordre!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Feil handling angitt for tilbakemelding: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "du kan ikke gi tilbakemelding på en bestilling som ikke er mottatt" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Navn" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL-adressen til integrasjonen" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Legitimasjon for autentisering" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Du kan bare ha én standard CRM-leverandør" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Ordre CRM-kobling" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "CRM-koblinger for bestillinger" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2440,15 +2448,15 @@ msgstr "" "for å generere en URL for nedlasting av ressursen når den tilknyttede " "bestillingen har status som fullført." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Last ned" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Nedlastinger" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2463,64 +2471,56 @@ msgstr "" "og en brukertildelt vurdering. Klassen bruker databasefelt for å modellere " "og administrere tilbakemeldingsdata på en effektiv måte." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Brukerkommentarer om deres erfaringer med produktet" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Tilbakemeldinger og kommentarer" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Refererer til det spesifikke produktet i en ordre som denne tilbakemeldingen" " handler om" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Relatert bestillingsprodukt" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Brukertildelt vurdering for produktet" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Produktvurdering" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "du må oppgi en kommentar, vurdering og bestille produkt-uid for å legge til " "tilbakemelding." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Feil under opprettelse av promokode: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Hjem" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt oss" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Om oss" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Betalingsinformasjon" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Levering" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2696,11 +2696,11 @@ msgstr "" "Alle rettigheter\n" " forbeholdt" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Både data og tidsavbrudd er påkrevd" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ugyldig tidsavbruddsverdi, den må være mellom 0 og 216000 sekunder" @@ -2732,7 +2732,7 @@ msgstr "Du har ikke tillatelse til å utføre denne handlingen." msgid "NOMINATIM_URL must be configured." msgstr "Parameteren NOMINATIM_URL må være konfigurert!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2794,15 +2794,23 @@ msgstr "Håndterer globale søk." msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken med å kjøpe som en bedrift uten registrering." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid er påkrevd" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Du kan bare laste ned den digitale ressursen én gang" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "bestillingen må betales før nedlasting av den digitale ressursen" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Ordreproduktet har ikke et produkt" + +#: core/views.py:359 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." @@ -2810,11 +2818,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon ble ikke funnet" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2822,7 +2830,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2833,7 +2841,11 @@ msgstr "" "administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å " "håndtere HTTP-omdirigeringen." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Returnerer gjeldende versjon av eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2847,7 +2859,7 @@ msgstr "" "støtte for dynamiske serialiseringsklasser basert på den aktuelle " "handlingen, tilpassbare tillatelser og gjengivelsesformater." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2861,7 +2873,7 @@ msgstr "" "API-lag og gir en standardisert måte å behandle forespørsler og svar for " "AttributeGroup-data på." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2877,7 +2889,7 @@ msgstr "" "eksempel filtrering etter bestemte felt eller henting av detaljert versus " "forenklet informasjon avhengig av forespørselen." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2891,7 +2903,7 @@ msgstr "" "Framework's viewset-mekanismer og bruker passende serialisatorer for ulike " "handlinger. Filtreringsmuligheter tilbys gjennom DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2905,7 +2917,7 @@ msgstr "" "kategoridata. Visningssettet håndhever også tillatelser for å sikre at bare " "autoriserte brukere har tilgang til bestemte data." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2917,7 +2929,7 @@ msgstr "" "Brand-objekter. Den bruker Djangos ViewSet-rammeverk for å forenkle " "implementeringen av API-sluttpunkter for Brand-objekter." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2935,7 +2947,7 @@ msgstr "" "for å hente produktdetaljer, tildele tillatelser og få tilgang til relaterte" " tilbakemeldinger om et produkt." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2950,7 +2962,7 @@ msgstr "" " gi strømlinjeformet tilgang til Vendor-relaterte ressurser gjennom Django " "REST-rammeverket." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2967,7 +2979,7 @@ msgstr "" "tilbakemeldingsobjekter. Den utvider basisklassen `EvibesViewSet` og bruker " "Djangos filtreringssystem for å spørre etter data." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2986,7 +2998,7 @@ msgstr "" "serialisatorer basert på den spesifikke handlingen som utføres, og håndhever" " tillatelser i samsvar med dette under samhandling med ordredata." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3001,11 +3013,11 @@ msgstr "" " tillegg inneholder det en detaljert handling for håndtering av " "tilbakemeldinger på OrderProduct-instanser" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Administrerer operasjoner knyttet til produktbilder i applikasjonen." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3013,15 +3025,15 @@ msgstr "" "Administrerer henting og håndtering av PromoCode-instanser gjennom ulike " "API-handlinger." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Representerer et visningssett for håndtering av kampanjer." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Håndterer operasjoner knyttet til lagerdata i systemet." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3039,7 +3051,7 @@ msgstr "" "integrert for å sikre at brukere bare kan administrere sine egne ønskelister" " med mindre eksplisitte tillatelser er gitt." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3053,12 +3065,12 @@ msgstr "" "inkluderer spesialisert atferd for ulike HTTP-metoder, overstyring av " "serializer og håndtering av tillatelser basert på forespørselskonteksten." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Feil i geokoding: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo index 987739e0fcaa9d0b73b74a3222201d2cfbf130ae..2f6fe3685309a8ad966afef23ff4df23acd6ba25 100644 GIT binary patch delta 13092 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 anHQLw8t&N;np>)YXGcKp?Pi`*1^)*wyj3~? diff --git a/core/locale/pl_PL/LC_MESSAGES/django.po b/core/locale/pl_PL/LC_MESSAGES/django.po index fb77b80a..e7578fac 100644 --- a/core/locale/pl_PL/LC_MESSAGES/django.po +++ b/core/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Obraz" msgid "images" msgstr "Obrazy" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stan magazynowy" @@ -118,11 +118,11 @@ msgstr "Stan magazynowy" msgid "stocks" msgstr "Akcje" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Zamów produkt" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Zamawianie produktów" @@ -130,7 +130,7 @@ msgstr "Zamawianie produktów" msgid "children" msgstr "Dzieci" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfiguracja" @@ -182,7 +182,7 @@ msgstr "Momental" msgid "successful" msgstr "Udany" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Pamięć podręczna we/wy" @@ -206,7 +206,7 @@ msgstr "Uzyskaj dostępne parametry aplikacji" msgid "send a message to the support team" msgstr "Wyślij wiadomość do zespołu wsparcia" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Żądanie adresu URL CORSed. Dozwolony jest tylko protokół https." @@ -453,7 +453,7 @@ msgstr "" "finalizowany przy użyciu salda użytkownika; Jeśli użyto `force_payment`, " "transakcja jest inicjowana." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "zakup zamówienia bez tworzenia konta" @@ -750,231 +750,231 @@ msgstr "usunąć relację zamówienie-produkt" msgid "add or remove feedback on an order–product relation" msgstr "dodawanie lub usuwanie opinii na temat relacji zamówienie-produkt" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Wyszukiwanie" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Nazwa" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategorie" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorie Ślimaki" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tagi" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Cena minimalna" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Maksymalna cena" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Jest aktywny" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Marka" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Atrybuty" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Ilość" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Ślimak" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Czy cyfrowy" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Uwzględnienie podkategorii" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Obejmuje produkty zamawiane osobiście" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "Aby użyć flagi include_subcategories, musi istnieć category_uuid" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Wyszukiwanie (ID, nazwa produktu lub numer części)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Kupione po (włącznie)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Kupione wcześniej (włącznie)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "E-mail użytkownika" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID użytkownika" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Identyfikator czytelny dla człowieka" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Rodzic" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Cała kategoria (ma co najmniej 1 produkt lub nie)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Poziom" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID produktu" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Klucz do wyszukania lub ustawienia w pamięci podręcznej" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Dane do przechowywania w pamięci podręcznej" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Limit czasu w sekundach na wprowadzenie danych do pamięci podręcznej" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Dane w pamięci podręcznej" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Kamelizowane dane JSON z żądanego adresu URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Dodawanie produktu do zamówienia" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Nie znaleziono zamówienia {order_uuid}!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Usuń wszystkie produkty z zamówienia" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Kup zamówienie" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Podaj albo order_uuid albo order_hr_id - wzajemnie się wykluczają!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Wykonanie akcji na liście produktów w zamówieniu" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Usuń/Dodaj" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Akcją musi być \"dodaj\" lub \"usuń\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Wykonanie akcji na liście produktów na liście życzeń" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Podaj wartość `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista życzeń {wishlist_uuid} nie została znaleziona!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Dodawanie produktu do zamówienia" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Usunięcie produktu z zamówienia" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Kup zamówienie" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -982,41 +982,41 @@ msgstr "" "Prześlij atrybuty jako ciąg znaków sformatowany w następujący sposób: " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Dodawanie lub usuwanie opinii dla produktu zamówienia" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Akcją musi być `add` lub `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} nie został znaleziony!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Oryginalny ciąg adresu podany przez użytkownika" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit musi wynosić od 1 do 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - działa jak urok" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Atrybuty" @@ -1029,11 +1029,11 @@ msgid "groups of attributes" msgstr "Grupy atrybutów" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategorie" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Marki" @@ -1042,7 +1042,7 @@ msgid "category image url" msgstr "Kategorie" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Procentowy narzut" @@ -1065,7 +1065,7 @@ msgstr "Tagi dla tej kategorii" msgid "products in this category" msgstr "Produkty w tej kategorii" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Sprzedawcy" @@ -1090,7 +1090,7 @@ msgid "represents feedback from a user." msgstr "Reprezentuje informacje zwrotne od użytkownika." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Powiadomienia" @@ -1098,7 +1098,7 @@ msgstr "Powiadomienia" msgid "download url for this order product if applicable" msgstr "Adres URL pobierania dla tego produktu zamówienia, jeśli dotyczy" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Informacje zwrotne" @@ -1106,7 +1106,7 @@ msgstr "Informacje zwrotne" msgid "a list of order products in this order" msgstr "Lista zamówionych produktów w tym zamówieniu" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Adres rozliczeniowy" @@ -1134,7 +1134,7 @@ msgstr "Czy wszystkie produkty w zamówieniu są cyfrowe?" msgid "transactions for this order" msgstr "Transakcje dla tego zamówienia" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Zamówienia" @@ -1146,19 +1146,19 @@ msgstr "Adres URL obrazu" msgid "product's images" msgstr "Zdjęcia produktu" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategoria" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Informacje zwrotne" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Marka" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Grupy atrybutów" @@ -1186,7 +1186,7 @@ msgstr "Liczba informacji zwrotnych" msgid "only available for personal orders" msgstr "Produkty dostępne tylko dla zamówień osobistych" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produkty" @@ -1198,15 +1198,15 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produkty w sprzedaży" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promocje" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Sprzedawca" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1214,11 +1214,11 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Listy życzeń" @@ -1226,7 +1226,7 @@ msgstr "Listy życzeń" msgid "tagged products" msgstr "Produkty Tagged" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Tagi produktu" @@ -1311,7 +1311,7 @@ msgstr "Wyniki wyszukiwania produktów" msgid "posts search results" msgstr "Wyniki wyszukiwania produktów" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1324,23 +1324,23 @@ msgstr "" "bardziej efektywnego kategoryzowania i zarządzania atrybutami w złożonym " "systemie." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Rodzic tej grupy" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Grupa atrybutów nadrzędnych" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Nazwa grupy atrybutów" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Grupa atrybutów" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1359,41 +1359,49 @@ msgstr "" "ograniczenia, dzięki czemu nadaje się do użytku w systemach, które " "współpracują z zewnętrznymi dostawcami." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Przechowuje dane uwierzytelniające i punkty końcowe wymagane do komunikacji " "API dostawcy." -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Informacje o uwierzytelnianiu" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Definiowanie znaczników dla produktów pobranych od tego dostawcy" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Procentowa marża sprzedawcy" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Nazwa tego sprzedawcy" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Nazwa sprzedawcy" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "plik odpowiedzi" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "odpowiedź sprzedawcy na ostatnie przetwarzanie" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Ścieżka do pliku integracji dostawcy" + +#: core/models.py:154 +msgid "integration path" +msgstr "Ścieżka integracji" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1408,27 +1416,27 @@ msgstr "" "Obsługuje operacje eksportowane przez mixiny i zapewnia dostosowanie " "metadanych do celów administracyjnych." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Wewnętrzny identyfikator tagu produktu" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Nazwa tagu" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Etykieta produktu" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1439,15 +1447,15 @@ msgstr "" "Zawiera atrybuty dla wewnętrznego identyfikatora tagu i przyjaznej dla " "użytkownika nazwy wyświetlanej." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "tag kategorii" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "tagi kategorii" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1469,51 +1477,51 @@ msgstr "" "administratorom określanie nazwy, opisu i hierarchii kategorii, a także " "przypisywanie atrybutów, takich jak obrazy, tagi lub priorytety." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Prześlij obraz reprezentujący tę kategorię" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Obraz kategorii" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Zdefiniuj procentowy narzut dla produktów w tej kategorii." -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Rodzic tej kategorii w celu utworzenia struktury hierarchicznej" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Kategoria nadrzędna" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Nazwa kategorii" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Podaj nazwę dla tej kategorii" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Dodaj szczegółowy opis dla tej kategorii" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Opis kategorii" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tagi, które pomagają opisać lub pogrupować tę kategorię" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Priorytet" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1526,47 +1534,47 @@ msgstr "" " unikalny slug i kolejność priorytetów. Pozwala na organizację i " "reprezentację danych związanych z marką w aplikacji." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Nazwa tej marki" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Nazwa marki" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Prześlij logo reprezentujące tę markę" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Mały wizerunek marki" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Prześlij duże logo reprezentujące tę markę" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Duży wizerunek marki" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Dodaj szczegółowy opis marki" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Opis marki" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Opcjonalne kategorie, z którymi powiązana jest ta marka" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategorie" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1582,68 +1590,68 @@ msgstr "" "częścią systemu zarządzania zapasami, umożliwiając śledzenie i ocenę " "produktów dostępnych od różnych dostawców." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Cena sprzedaży" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Produkt powiązany" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Plik cyfrowy" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Zapisy magazynowe" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1664,51 +1672,51 @@ msgstr "" "definiowania i manipulowania danymi produktu i powiązanymi z nimi " "informacjami w aplikacji." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Kategoria, do której należy ten produkt" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Opcjonalnie można powiązać ten produkt z marką" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Wskazuje, czy produkt jest dostarczany cyfrowo." -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Czy produkt jest cyfrowy?" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Wyraźna nazwa identyfikująca produkt" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Nazwa produktu" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Opis produktu" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Numer części dla tego produktu" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Numer części" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Jednostka magazynowa dla tego produktu" @@ -1776,11 +1784,11 @@ msgstr "Nazwa tego atrybutu" msgid "attribute's name" msgstr "Nazwa atrybutu" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "można filtrować" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Które atrybuty i wartości mogą być używane do filtrowania tej kategorii." @@ -1839,27 +1847,27 @@ msgstr "Tekst alternatywny obrazu" msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Obraz produktu" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Priorytet wyświetlania" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Zdjęcia produktów" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1875,39 +1883,39 @@ msgstr "" "produktami. Integruje się z katalogiem produktów w celu określenia pozycji, " "których dotyczy kampania." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Procent rabatu" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Nazwa promocji" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Opis promocji" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Dołączone produkty" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promocja" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1919,23 +1927,23 @@ msgstr "" " produktów, wspierając operacje takie jak dodawanie i usuwanie produktów, a " "także wspierając operacje dodawania i usuwania wielu produktów jednocześnie." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Lista życzeń" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1951,19 +1959,19 @@ msgstr "" "funkcjonalność z określonych miksów i zapewnia dodatkowe niestandardowe " "funkcje." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Film dokumentalny" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Filmy dokumentalne" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Nierozwiązany" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1985,59 +1993,59 @@ msgstr "" "również powiązanie adresu z użytkownikiem, ułatwiając spersonalizowaną " "obsługę danych." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Linia adresu dla klienta" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Linia adresowa" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "ul." -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Okręg" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Miasto" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Kod pocztowy" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Kraj" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolocation Point(Longitude, Latitude)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Pełna odpowiedź JSON z geokodera dla tego adresu" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Przechowywana odpowiedź JSON z usługi geokodowania" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adres" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresy" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2054,73 +2062,73 @@ msgstr "" "Obejmuje funkcję sprawdzania poprawności i stosowania kodu promocyjnego do " "zamówienia, zapewniając jednocześnie spełnienie ograniczeń." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Unikalny kod używany przez użytkownika do realizacji rabatu." -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Stała kwota rabatu stosowana, jeśli procent nie jest używany" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Rabat procentowy" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Końcowy czas ważności" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Znacznik czasu użycia kodu promocyjnego, pusty, jeśli nie został jeszcze " "użyty." -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Przypisany użytkownik" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Kod promocyjny" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Kody promocyjne" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2128,16 +2136,16 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2154,142 +2162,142 @@ msgstr "" "Funkcjonalność wspiera również zarządzanie produktami w cyklu życia " "zamówienia." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Adres rozliczeniowy użyty dla tego zamówienia" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Opcjonalny kod promocyjny zastosowany do tego zamówienia" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Zastosowany kod promocyjny" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Adres wysyłki użyty dla tego zamówienia" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Adres wysyłki" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Aktualny status zamówienia w jego cyklu życia" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Status zamówienia" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Struktura JSON powiadomień do wyświetlenia użytkownikom, w interfejsie " "administratora używany jest widok tabeli" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Reprezentacja JSON atrybutów zamówienia dla tego zamówienia" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Użytkownik, który złożył zamówienie" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Użytkownik" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Znacznik czasu, kiedy zamówienie zostało sfinalizowane" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Kup czas" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Czytelny dla człowieka identyfikator zamówienia" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "Identyfikator czytelny dla człowieka" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Zamówienie" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" "Użytkownik może mieć tylko jedno oczekujące zlecenie w danym momencie!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Nie można dodać produktów do zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Nie można dodać więcej produktów niż jest dostępnych w magazynie" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "Możesz kupować tylko produkty fizyczne z podanym adresem wysyłki!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adres nie istnieje" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "W tej chwili nie możesz dokonać zakupu, spróbuj ponownie za kilka minut." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Użytkownik bez salda nie może kupować za saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2298,7 +2306,7 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2306,7 +2314,7 @@ msgstr "" "Nieprawidłowa metoda płatności: {payment_method} z " "{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2328,112 +2336,112 @@ msgstr "" "pobierania dla produktów cyfrowych. Model ten integruje się z modelami Order" " i Product i przechowuje odniesienia do nich." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Cena zapłacona przez klienta za ten produkt w momencie zakupu." -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" "Wewnętrzne komentarze dla administratorów dotyczące tego zamówionego " "produktu" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Ilość produktu" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status linii produktów" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct musi mieć powiązane zamówienie!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Nieprawidłowa akcja określona dla informacji zwrotnej: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" "Nie można usunąć produktów z zamówienia, które nie jest zamówieniem " "oczekującym." -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Nazwa" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "Adres URL integracji" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Dane uwierzytelniające" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Można mieć tylko jednego domyślnego dostawcę CRM" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Łącze CRM zamówienia" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Łącza CRM zamówień" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2450,15 +2458,15 @@ msgstr "" "generowania adresu URL do pobrania zasobu, gdy powiązane zamówienie ma " "status ukończonego." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Pobierz" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Pliki do pobrania" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2474,64 +2482,56 @@ msgstr "" "Klasa wykorzystuje pola bazy danych do efektywnego modelowania i zarządzania" " danymi opinii." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Komentarze użytkowników na temat ich doświadczeń z produktem" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Komentarze zwrotne" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Odnosi się do konkretnego produktu w zamówieniu, którego dotyczy ta " "informacja zwrotna." -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Powiązany produkt zamówienia" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Ocena produktu przypisana przez użytkownika" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Ocena produktu" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Aby dodać opinię, należy podać komentarz, ocenę i identyfikator produktu " "zamówienia." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Błąd podczas tworzenia kodu promocyjnego: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Strona główna" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakt" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "O nas" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Informacje dotyczące płatności" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Dostawa" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2707,11 +2707,11 @@ msgstr "" "wszelkie prawa\n" " zastrzeżone" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Wymagane są zarówno dane, jak i limit czasu" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Nieprawidłowa wartość limitu czasu, musi zawierać się w przedziale od 0 do " @@ -2745,7 +2745,7 @@ msgstr "Nie masz uprawnień do wykonania tej akcji." msgid "NOMINATIM_URL must be configured." msgstr "Parametr NOMINATIM_URL musi być skonfigurowany!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2806,15 +2806,23 @@ msgstr "Obsługuje globalne zapytania wyszukiwania." msgid "Handles the logic of buying as a business without registration." msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "Order_product_uuid jest wymagany" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Zasób cyfrowy można pobrać tylko raz" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "zamówienie musi zostać opłacone przed pobraniem zasobu cyfrowego" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Produkt zamówienia nie ma produktu" + +#: core/views.py:359 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." @@ -2822,11 +2830,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "nie znaleziono favicon" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2834,7 +2842,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2845,7 +2853,11 @@ msgstr "" "administratora Django. Używa funkcji `redirect` Django do obsługi " "przekierowania HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Zwraca aktualną wersję aplikacji eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2859,7 +2871,7 @@ msgstr "" "dynamicznych klas serializatora w oparciu o bieżącą akcję, konfigurowalne " "uprawnienia i formaty renderowania." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2873,7 +2885,7 @@ msgstr "" "aplikacji i zapewnia ustandaryzowany sposób przetwarzania żądań i odpowiedzi" " dla danych AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2889,7 +2901,7 @@ msgstr "" "filtrowanie według określonych pól lub pobieranie szczegółowych lub " "uproszczonych informacji w zależności od żądania." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2903,7 +2915,7 @@ msgstr "" "Django REST Framework i używa odpowiednich serializatorów dla różnych akcji." " Możliwości filtrowania są dostarczane przez DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2917,7 +2929,7 @@ msgstr "" "danych kategorii. Zestaw widoków wymusza również uprawnienia, aby zapewnić, " "że tylko autoryzowani użytkownicy mają dostęp do określonych danych." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2929,7 +2941,7 @@ msgstr "" "Brand. Używa frameworka ViewSet Django, aby uprościć implementację punktów " "końcowych API dla obiektów Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2947,7 +2959,7 @@ msgstr "" " szczegółów produktu, stosowania uprawnień i uzyskiwania dostępu do " "powiązanych informacji zwrotnych o produkcie." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2961,7 +2973,7 @@ msgstr "" " do obsługi różnych działań. Celem tej klasy jest zapewnienie usprawnionego " "dostępu do zasobów związanych z Vendorem poprzez framework Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2978,7 +2990,7 @@ msgstr "" "bazowy `EvibesViewSet` i wykorzystuje system filtrowania Django do " "odpytywania danych." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2997,7 +3009,7 @@ msgstr "" "wykorzystuje wiele serializatorów w oparciu o konkretną wykonywaną akcję i " "odpowiednio egzekwuje uprawnienia podczas interakcji z danymi zamówienia." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3012,26 +3024,26 @@ msgstr "" "szczegółową akcję do obsługi informacji zwrotnych na temat instancji " "OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Zarządza operacjami związanymi z obrazami produktów w aplikacji." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" "Zarządza pobieraniem i obsługą instancji PromoCode poprzez różne akcje API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Reprezentuje zestaw widoków do zarządzania promocjami." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Obsługuje operacje związane z danymi Stock w systemie." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3049,7 +3061,7 @@ msgstr "" "że użytkownicy mogą zarządzać tylko własnymi listami życzeń, chyba że " "zostaną przyznane wyraźne uprawnienia." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3063,12 +3075,12 @@ msgstr "" "wyspecjalizowane zachowania dla różnych metod HTTP, zastępowanie serializera" " i obsługę uprawnień w oparciu o kontekst żądania." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Błąd geokodowania: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo index 6227f93ce396fb717194f863a3d270e69551bab4..3e9a9763bc7ed389eb7b27cf3d39f45e86e2a7b3 100644 GIT binary patch delta 13079 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 delta 12825 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 N>Xj+-W_or8{tsUHO>O`H diff --git a/core/locale/pt_BR/LC_MESSAGES/django.po b/core/locale/pt_BR/LC_MESSAGES/django.po index 42b189bf..510c930e 100644 --- a/core/locale/pt_BR/LC_MESSAGES/django.po +++ b/core/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Imagem" msgid "images" msgstr "Imagens" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Estoque" @@ -118,11 +118,11 @@ msgstr "Estoque" msgid "stocks" msgstr "Ações" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Pedido de produto" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Solicitar produtos" @@ -130,7 +130,7 @@ msgstr "Solicitar produtos" msgid "children" msgstr "Crianças" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Configuração" @@ -182,7 +182,7 @@ msgstr "Momental" msgid "successful" msgstr "Bem-sucedido" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "E/S do cache" @@ -206,7 +206,7 @@ msgstr "Obter os parâmetros expostos do aplicativo" msgid "send a message to the support team" msgstr "Envie uma mensagem para a equipe de suporte" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Solicite um URL com CORS. Somente https é permitido." @@ -444,7 +444,7 @@ msgstr "" "concluída usando o saldo do usuário; se `force_payment` for usado, uma " "transação será iniciada." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "comprar um pedido sem criar uma conta" @@ -740,273 +740,273 @@ msgstr "excluir uma relação pedido-produto" msgid "add or remove feedback on an order–product relation" msgstr "adicionar ou remover feedback em uma relação pedido-produto" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Pesquisa" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Nome" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Categorias" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Categorias Lesmas" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Tags" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Preço mínimo" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Preço máximo" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Está ativo" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Brand" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Atributos" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Quantidade" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Lesma" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "É digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Incluir subcategorias" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Incluir produtos pessoais encomendados" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Deve haver um category_uuid para usar o sinalizador include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Pesquisa (ID, nome do produto ou número de peça)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Comprado depois (inclusive)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Comprado antes (inclusive)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "E-mail do usuário" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID do usuário" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "ID legível por humanos" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Parent" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Toda a categoria (com pelo menos 1 produto ou não)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Nível" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID do produto" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Chave para procurar ou colocar no cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Dados a serem armazenados no cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Tempo limite em segundos para definir os dados para o cache" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Dados em cache" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Dados JSON camelizados da URL solicitada" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Somente URLs que começam com http(s):// são permitidos" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Adicionar um produto ao pedido" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Pedido {order_uuid} não encontrado!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Remover todos os produtos do pedido" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Comprar um pedido" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "Forneça order_uuid ou order_hr_id - mutuamente exclusivos!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Executar uma ação em uma lista de produtos no pedido" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Remover/Adicionar" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "A ação deve ser \"adicionar\" ou \"remover\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Executar uma ação em uma lista de produtos na lista de desejos" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Forneça o valor `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Lista de desejos {wishlist_uuid} não encontrada!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Adicionar um produto ao pedido" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Remover um produto do pedido" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Comprar um pedido" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Envie os atributos como uma string formatada como attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Adicionar ou excluir um feedback para o produto do pedido" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "A ação deve ser `add` ou `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} não encontrado!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Cadeia de endereços original fornecida pelo usuário" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "O limite deve estar entre 1 e 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funciona muito bem" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Atributos" @@ -1019,11 +1019,11 @@ msgid "groups of attributes" msgstr "Grupos de atributos" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Categorias" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Marcas" @@ -1032,7 +1032,7 @@ msgid "category image url" msgstr "Categorias" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Porcentagem de marcação" @@ -1054,7 +1054,7 @@ msgstr "Tags para esta categoria" msgid "products in this category" msgstr "Produtos desta categoria" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Vendors" @@ -1080,7 +1080,7 @@ msgid "represents feedback from a user." msgstr "Representa o feedback de um usuário." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Notificações" @@ -1088,7 +1088,7 @@ msgstr "Notificações" msgid "download url for this order product if applicable" msgstr "URL de download para este produto do pedido, se aplicável" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Feedback" @@ -1096,7 +1096,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "Uma lista dos produtos solicitados nesse pedido" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Endereço de cobrança" @@ -1124,7 +1124,7 @@ msgstr "Todos os produtos estão no pedido digital?" msgid "transactions for this order" msgstr "Transações para esta ordem" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Pedidos" @@ -1136,19 +1136,19 @@ msgstr "URL da imagem" msgid "product's images" msgstr "Imagens do produto" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Categoria" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Feedbacks" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Brand" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Grupos de atributos" @@ -1176,7 +1176,7 @@ msgstr "Número de feedbacks" msgid "only available for personal orders" msgstr "Produtos disponíveis apenas para pedidos pessoais" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produtos" @@ -1188,15 +1188,15 @@ msgstr "Códigos promocionais" msgid "products on sale" msgstr "Produtos à venda" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promoções" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Vendor" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1204,11 +1204,11 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Listas de desejos" @@ -1216,7 +1216,7 @@ msgstr "Listas de desejos" msgid "tagged products" msgstr "Produtos marcados" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Etiquetas do produto" @@ -1302,7 +1302,7 @@ msgstr "Resultados da pesquisa de produtos" msgid "posts search results" msgstr "Resultados da pesquisa de produtos" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1315,23 +1315,23 @@ msgstr "" "útil para categorizar e gerenciar atributos de forma mais eficaz em um " "sistema complexo." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Pai deste grupo" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Grupo de atributos pai" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Nome do grupo de atributos" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Grupo de atributos" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1350,41 +1350,49 @@ msgstr "" " adicionais, tornando-o adequado para uso em sistemas que interagem com " "fornecedores terceirizados." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Armazena as credenciais e os pontos de extremidade necessários para a " "comunicação da API do fornecedor" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Informações de autenticação" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Definir a marcação para produtos recuperados desse fornecedor" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Porcentagem da margem de lucro do fornecedor" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Nome do fornecedor" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Nome do fornecedor" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "arquivo de resposta" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "última resposta de processamento do fornecedor" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Caminho do arquivo de integração do fornecedor" + +#: core/models.py:154 +msgid "integration path" +msgstr "Caminho de integração" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1399,27 +1407,27 @@ msgstr "" "operações exportadas por meio de mixins e fornece personalização de " "metadados para fins administrativos." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Identificador de tag interno para a tag do produto" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Nome da etiqueta" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Nome de fácil utilização para a etiqueta do produto" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Nome de exibição da tag" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Etiqueta do produto" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1430,15 +1438,15 @@ msgstr "" "Ela inclui atributos para um identificador de tag interno e um nome de " "exibição de fácil utilização." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "tag de categoria" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "tags de categoria" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1461,51 +1469,51 @@ msgstr "" "descrição e a hierarquia das categorias, bem como atribuam atributos como " "imagens, tags ou prioridade." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Faça upload de uma imagem que represente essa categoria" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Imagem da categoria" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Definir uma porcentagem de majoração para os produtos dessa categoria" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Pai dessa categoria para formar uma estrutura hierárquica" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Categoria dos pais" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Nome da categoria" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Forneça um nome para essa categoria" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Adicione uma descrição detalhada para essa categoria" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Descrição da categoria" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "tags que ajudam a descrever ou agrupar essa categoria" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioridade" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1519,47 +1527,47 @@ msgstr "" "Ela permite a organização e a representação de dados relacionados à marca no" " aplicativo." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Nome da marca" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Nome da marca" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Faça upload de um logotipo que represente essa marca" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Imagem pequena da marca" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Faça upload de um logotipo grande que represente essa marca" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Imagem de marca grande" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Adicione uma descrição detalhada da marca" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Descrição da marca" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Categorias opcionais às quais essa marca está associada" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Categorias" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1575,68 +1583,68 @@ msgstr "" "sistema de gerenciamento de estoque para permitir o rastreamento e a " "avaliação dos produtos disponíveis de vários fornecedores." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Fornecedor associado" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Preço de venda" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Produto associado" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU do fornecedor" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Arquivo digital" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Entradas de estoque" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1657,51 +1665,51 @@ msgstr "" "frequência para melhorar o desempenho. É usada para definir e manipular " "dados de produtos e suas informações associadas em um aplicativo." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Categoria à qual este produto pertence" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Opcionalmente, associe esse produto a uma marca" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Indica se esse produto é entregue digitalmente" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "O produto é digital" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Fornecer um nome de identificação claro para o produto" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Nome do produto" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Descrição do produto" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Número de peça para este produto" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Número da peça" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Unidade de Manutenção de Estoque para este produto" @@ -1769,11 +1777,11 @@ msgstr "Nome desse atributo" msgid "attribute's name" msgstr "Nome do atributo" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "é filtrável" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Quais atributos e valores podem ser usados para filtrar essa categoria." @@ -1832,27 +1840,27 @@ msgstr "Texto alternativo da imagem" msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Imagem do produto" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Prioridade de exibição" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Imagens do produto" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1868,39 +1876,39 @@ msgstr "" "vinculá-la aos produtos aplicáveis. Ela se integra ao catálogo de produtos " "para determinar os itens afetados na campanha." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Nome da promoção" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Descrição da promoção" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Produtos incluídos" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promoção" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1913,23 +1921,23 @@ msgstr "" " bem como operações de suporte para adicionar e remover vários produtos de " "uma só vez." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Lista de desejos" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1945,19 +1953,19 @@ msgstr "" "de armazenamento dos arquivos do documentário. Ela estende a funcionalidade " "de mixins específicos e fornece recursos personalizados adicionais." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documentário" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentários" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Não resolvido" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1979,59 +1987,59 @@ msgstr "" "associar um endereço a um usuário, facilitando o tratamento personalizado " "dos dados." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Linha de endereço do cliente" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Linha de endereço" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Rua" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Distrito" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Cidade" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Região" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Código postal" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "País" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Ponto de geolocalização (Longitude, Latitude)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Resposta JSON completa do geocodificador para este endereço" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Resposta JSON armazenada do serviço de geocodificação" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Endereço" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Endereços" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2048,74 +2056,74 @@ msgstr "" "funcionalidade para validar e aplicar o código promocional a um pedido, " "garantindo que as restrições sejam atendidas." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Código exclusivo usado por um usuário para resgatar um desconto" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Valor de desconto fixo aplicado se a porcentagem não for usada" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Desconto percentual aplicado se o valor fixo não for usado" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Desconto percentual" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Tempo de validade final" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "" "Registro de data e hora a partir do qual esse código promocional é válido" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Hora de início da validade" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Registro de data e hora em que o código promocional foi usado, em branco se " "ainda não tiver sido usado" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Usuário atribuído" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Código promocional" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Códigos promocionais" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2123,16 +2131,16 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo de desconto inválido para o código promocional {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2149,138 +2157,138 @@ msgstr "" "atualizados. Da mesma forma, a funcionalidade suporta o gerenciamento dos " "produtos no ciclo de vida do pedido." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "O endereço de cobrança usado para esse pedido" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Código promocional opcional aplicado a este pedido" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Código promocional aplicado" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "O endereço de entrega usado para esse pedido" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Endereço de entrega" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Status atual do pedido em seu ciclo de vida" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Status do pedido" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Estrutura JSON de notificações a serem exibidas aos usuários; na interface " "do usuário do administrador, é usada a visualização de tabela" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Representação JSON dos atributos do pedido para esse pedido" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "O usuário que fez o pedido" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Usuário" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "O registro de data e hora em que o pedido foi finalizado" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Tempo de compra" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Um identificador legível por humanos para o pedido" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID legível por humanos" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Pedido" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Um usuário deve ter apenas uma ordem pendente por vez!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "Não é possível adicionar produtos a um pedido que não esteja pendente" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "" "Não é possível adicionar mais produtos do que os disponíveis em estoque" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "Não é possível remover produtos de um pedido que não esteja pendente" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Você só pode comprar produtos físicos com o endereço de entrega " "especificado!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "O endereço não existe" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Não é possível comprar neste momento, tente novamente em alguns minutos." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Valor de força inválido" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Não é possível comprar um pedido sem um usuário!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Um usuário sem saldo não pode comprar com saldo!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2288,7 +2296,7 @@ msgstr "" "Não é possível comprar sem registro, forneça as seguintes informações: nome " "do cliente, e-mail do cliente, número de telefone do cliente" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2296,7 +2304,7 @@ msgstr "" "Método de pagamento inválido: {payment_method} de " "{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2318,109 +2326,109 @@ msgstr "" "para produtos digitais. O modelo se integra aos modelos Order e Product e " "armazena uma referência a eles." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "O preço pago pelo cliente por esse produto no momento da compra" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Comentários internos" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Notificações do usuário" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Ordem dos pais" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Quantidade do produto" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status da linha de produtos" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "O Orderproduct deve ter um pedido associado!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Ação incorreta especificada para o feedback: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "você não pode dar feedback a um pedido que não foi recebido" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Nome" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL da integração" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Credenciais de autenticação" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Você só pode ter um provedor de CRM padrão" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRMs" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Link do CRM do pedido" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Links de CRM dos pedidos" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2436,15 +2444,15 @@ msgstr "" "está visível publicamente. Ela inclui um método para gerar um URL para " "download do ativo quando o pedido associado estiver em um status concluído." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Baixar" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Downloads" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2459,65 +2467,57 @@ msgstr "" "classificação atribuída pelo usuário. A classe usa campos de banco de dados " "para modelar e gerenciar com eficiência os dados de feedback." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" "Comentários fornecidos pelo usuário sobre sua experiência com o produto" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Comentários de feedback" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Faz referência ao produto específico em um pedido sobre o qual se trata esse" " feedback" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Produto de pedido relacionado" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Classificação atribuída pelo usuário ao produto" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Avaliação do produto" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Você deve fornecer um comentário, uma classificação e o uuid do produto do " "pedido para adicionar feedback." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Erro durante a criação do código promocional: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Início" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Entre em contato conosco" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Sobre nós" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Informações de pagamento" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Entrega" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2692,11 +2692,11 @@ msgstr "" "todos os direitos\n" " reservados" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "São necessários dados e tempo limite" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Valor de tempo limite inválido, deve estar entre 0 e 216000 segundos" @@ -2728,7 +2728,7 @@ msgstr "Você não tem permissão para executar essa ação." msgid "NOMINATIM_URL must be configured." msgstr "O parâmetro NOMINATIM_URL deve ser configurado!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2791,15 +2791,23 @@ msgstr "Trata as consultas de pesquisa global." msgid "Handles the logic of buying as a business without registration." msgstr "Lida com a lógica de comprar como uma empresa sem registro." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid é obrigatório" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Você só pode fazer o download do ativo digital uma vez" -#: core/views.py:315 +#: core/views.py:318 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" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "O produto do pedido não tem um produto" + +#: core/views.py:359 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." @@ -2807,11 +2815,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon não encontrado" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2819,7 +2827,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2830,7 +2838,11 @@ msgstr "" "índice da interface de administração do Django. Ela usa a função `redirect` " "do Django para lidar com o redirecionamento HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Retorna a versão atual do eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2844,7 +2856,7 @@ msgstr "" "inclui suporte para classes de serializadores dinâmicos com base na ação " "atual, permissões personalizáveis e formatos de renderização." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2858,7 +2870,7 @@ msgstr "" "parte da camada de API do aplicativo e fornece uma maneira padronizada de " "processar solicitações e respostas para dados do AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2874,7 +2886,7 @@ msgstr "" " a filtragem por campos específicos ou a recuperação de informações " "detalhadas ou simplificadas, dependendo da solicitação." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2889,7 +2901,7 @@ msgstr "" "serializadores apropriados para diferentes ações. Os recursos de filtragem " "são fornecidos por meio do DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2904,7 +2916,7 @@ msgstr "" " permissões para garantir que somente usuários autorizados possam acessar " "dados específicos." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2916,7 +2928,7 @@ msgstr "" "de objetos de marca. Ela usa a estrutura ViewSet do Django para simplificar " "a implementação de pontos de extremidade da API para objetos de marca." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2934,7 +2946,7 @@ msgstr "" "recuperar detalhes do produto, aplicar permissões e acessar o feedback " "relacionado de um produto." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2949,7 +2961,7 @@ msgstr "" "diferentes ações. O objetivo dessa classe é fornecer acesso simplificado aos" " recursos relacionados ao Vendor por meio da estrutura Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2966,7 +2978,7 @@ msgstr "" "feedback acessíveis. Ela estende a base `EvibesViewSet` e faz uso do sistema" " de filtragem do Django para consultar dados." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2985,7 +2997,7 @@ msgstr "" "específica que está sendo executada e impõe as permissões de acordo com a " "interação com os dados do pedido." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3000,11 +3012,11 @@ msgstr "" "fornece uma ação detalhada para lidar com feedback sobre instâncias de " "OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Gerencia operações relacionadas a imagens de produtos no aplicativo." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3012,15 +3024,15 @@ msgstr "" "Gerencia a recuperação e o manuseio de instâncias de PromoCode por meio de " "várias ações de API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Representa um conjunto de visualizações para gerenciar promoções." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Trata de operações relacionadas a dados de estoque no sistema." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3039,7 +3051,7 @@ msgstr "" "possam gerenciar suas próprias listas de desejos, a menos que sejam " "concedidas permissões explícitas." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3054,12 +3066,12 @@ msgstr "" "substituições de serializadores e tratamento de permissões com base no " "contexto da solicitação." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Erro de geocodificação: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo index 33316bb610c6ab5ff1e1f33e12e391e3e10814a2..96b7c68a1a3aad8da5db815f105c3713ba006352 100644 GIT binary patch delta 13078 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 delta 12824 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μ3h>!R#0*!j z^=ERD(a#}FyYD!O{YhOSqAAzW7=NZbiQvWNJC;~{Kg%hZi8hC+(>6VX+ATV^5YNaD zAl@L|gg8OuC0~>4n~#WZh|eg{F^2e+bZ(bd*-I`xK^cxnE>;I8Qr-YRK<#rKgGq-I zZxF-CSEX&n@sKhdpQC>4^1e-C4+UXl^lMcB5lmSWX2a6RA1~%ZBI8&`f|uC;j+HK@ z|LfIo$`_Eohk8&Q#Z#!KX!Hx8@h3gaH~v)cUBHZTmG6+xOOzyk+?8!2{~hTBE--?0 z2r-n1clG-A`{GfVb_J;W!xiSl9WOL^$9?Wg-ajUu#yZ|7^x7QcDpgjL^hOLNR+9dU z7*Bjc{xrc;+H@m$IGSzb+Y^5i^*CoV>exbE#&Ll}Ga`v7LYpeu|MO_Td&mTmUV~x8 zN5ubk%%-q2b>9>J5@TJX_et}G$&4gF8Z(X`NlYf+7kglutC&f85ozx>68{i};7P3S z9OfDkNYMe*QJ?t9m$Lulp}Y?- z-#>gsUr}(2)bGSO(mLL<_`WJBnUfFjP0M#w;@<I?8c^isW_Z6|6&FO7gj~ADk-hpnu$<@Bh5)d`ErGk(8-x; zRH7^oW+9((^d|AlWj5nD+GHH>l75*?PhyEHpXKyu|LZ7CT&8d%(S;~Zd_z1Ua`{^D z$|ZfqrQ4CNO$Szyze)T_+$9bZIto#D1vC11hW6)tHN5vpUnPBnxUcJ1bQQCl{hX(0 zsQOKq)t%`%=?g^0v5@q)#0esjctXW=Vnap)=TPdhkgkn6h{8lE&guP{gpN3idC!?a zD_8$51+Nmf$QRAHE%F}{bqO6|L}uz+;Zn?oH!z0wZ=sHL_$hIj^mn?ydSudx?G$t& zejpAJ9}|O!cZrN6mUh9M%=1DA=1{hi(2vxJTw#4AKK%4@ndD$h7Nk(f)&bOl+s&|jo;(RKpqgQQF2 zc0$J|UJ^B3CY(n7U0Ri;T>5R&wWzDDLXP636JKaojIv)8ls#1gj_brgB9OA(LBTnl2-DxzPOdsry{fIY-<}_S{zf!&)bquli{yR&vX>;Cg|AsvPB;0p~Jlm5x&GgG&K^iv|mHaCBeu0{I1%hx6EPrKjn z0cBA*5o-_;q;(u6hLJ9;OxcvN$!RTP24o3H89ZQg%E)mh;f*mTL;HjbADlcYIqmru2^G@@J|7j5e!sZqVnF)M V2+zSH>1P^vg0rRPZ|>Ra|6lVoTde>9 diff --git a/core/locale/ro_RO/LC_MESSAGES/django.po b/core/locale/ro_RO/LC_MESSAGES/django.po index 1c9f4da7..13510499 100644 --- a/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/core/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Imagine" msgid "images" msgstr "Imagini" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stoc" @@ -118,11 +118,11 @@ msgstr "Stoc" msgid "stocks" msgstr "Stocuri" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Comanda Produs" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Comandați produse" @@ -130,7 +130,7 @@ msgstr "Comandați produse" msgid "children" msgstr "Copii" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Configurare" @@ -182,7 +182,7 @@ msgstr "Momental" msgid "successful" msgstr "De succes" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -206,7 +206,7 @@ msgstr "Obțineți parametrii expunibili ai aplicației" msgid "send a message to the support team" msgstr "Trimiteți un mesaj echipei de asistență" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Solicitați un URL CORSed. Numai https este permis." @@ -451,7 +451,7 @@ msgstr "" "achiziția este finalizată utilizând soldul utilizatorului; Dacă se " "utilizează `force_payment`, este inițiată o tranzacție." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "achiziționarea unei comenzi fără crearea unui cont" @@ -751,234 +751,234 @@ msgstr "ștergeți o relație comandă-produs" msgid "add or remove feedback on an order–product relation" msgstr "adăugarea sau eliminarea feedback-ului într-o relație comandă-produs" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Căutare" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Nume și prenume" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Categorii" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Categorii Melci" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Etichete" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Preț minim" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Preț maxim" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Este activ" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Marca" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Atribute" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Cantitate" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Melc" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Este digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Includeți subcategorii" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Includeți produsele comandate personal" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Trebuie să existe un category_uuid pentru a utiliza flagul " "include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Căutare (ID, numele produsului sau numărul piesei)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Cumpărat după (inclusiv)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Cumpărat înainte (inclusiv)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "E-mail utilizator" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID utilizator" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Statut" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "ID lizibil de către om" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Părinte" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Întreaga categorie (are cel puțin 1 produs sau nu)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Nivel" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID produs" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Cheie care trebuie căutată sau introdusă în cache" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Date de stocat în cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout în secunde pentru a seta datele în cache" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Date în cache" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Date JSON Camelizate de la URL-ul solicitat" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Sunt permise numai URL-urile care încep cu http(s)://" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Adăugați un produs la comandă" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Comanda {order_uuid} nu a fost găsită!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Eliminați toate produsele din comandă" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Cumpărați o comandă" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Efectuați o acțiune asupra unei liste de produse din comandă" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Eliminare/adăugare" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Acțiunea trebuie să fie fie \"adăugare\" sau \"eliminare\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Efectuați o acțiune pe o listă de produse din lista de dorințe" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vă rugăm să furnizați valoarea `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Wishlist {wishlist_uuid} nu a fost găsit!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Adăugați un produs la comandă" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Eliminați un produs din comandă" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Cumpărați o comandă" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -986,41 +986,41 @@ msgstr "" "Vă rugăm să trimiteți atributele sub formă de șir format ca attr1=valoare1, " "attr2=valoare2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Adăugați sau ștergeți un feedback pentru comandaprodus" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Acțiunea trebuie să fie `add` sau `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Comandaprodus {order_product_uuid} nu a fost găsită!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Șirul de adrese original furnizat de utilizator" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limita trebuie să fie între 1 și 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - funcționează ca un farmec" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Atribute" @@ -1033,11 +1033,11 @@ msgid "groups of attributes" msgstr "Grupuri de atribute" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Categorii" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Mărci" @@ -1046,7 +1046,7 @@ msgid "category image url" msgstr "Categorii" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Procentul de majorare" @@ -1071,7 +1071,7 @@ msgstr "Etichete pentru această categorie" msgid "products in this category" msgstr "Produse din această categorie" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Furnizori" @@ -1096,7 +1096,7 @@ msgid "represents feedback from a user." msgstr "Reprezintă feedback de la un utilizator." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Notificări" @@ -1104,7 +1104,7 @@ msgstr "Notificări" msgid "download url for this order product if applicable" msgstr "URL de descărcare pentru acest produs de comandă, dacă este cazul" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Feedback" @@ -1112,7 +1112,7 @@ msgstr "Feedback" msgid "a list of order products in this order" msgstr "O listă a produselor comandate în această comandă" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Adresa de facturare" @@ -1140,7 +1140,7 @@ msgstr "Sunt toate produsele din comanda digitală" msgid "transactions for this order" msgstr "Tranzacții pentru această comandă" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Ordine" @@ -1152,19 +1152,19 @@ msgstr "URL imagine" msgid "product's images" msgstr "Imagini ale produsului" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Categorie" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Feedback-uri" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Marca" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Grupuri de atribute" @@ -1192,7 +1192,7 @@ msgstr "Numărul de reacții" msgid "only available for personal orders" msgstr "Produse disponibile numai pentru comenzi personale" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produse" @@ -1204,15 +1204,15 @@ msgstr "Coduri promoționale" msgid "products on sale" msgstr "Produse scoase la vânzare" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promoții" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Furnizor" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1220,11 +1220,11 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Produse dorite" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Liste de dorințe" @@ -1232,7 +1232,7 @@ msgstr "Liste de dorințe" msgid "tagged products" msgstr "Produse etichetate" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Etichete de produs" @@ -1319,7 +1319,7 @@ msgstr "Rezultate căutare produse" msgid "posts search results" msgstr "Rezultate căutare produse" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1332,23 +1332,23 @@ msgstr "" " lucru poate fi util pentru clasificarea și gestionarea mai eficientă a " "atributelor în cadrul unui sistem complex." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Părinte al acestui grup" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Grup de atribute părinte" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Numele grupului de atribute" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Grup de atribute" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1367,42 +1367,50 @@ msgstr "" "metadate și constrângeri suplimentare, ceea ce îl face potrivit pentru " "utilizarea în sisteme care interacționează cu furnizori terți." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Stochează acreditările și punctele finale necesare pentru comunicarea API a " "furnizorului" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Informații privind autentificarea" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definirea marjei de profit pentru produsele preluate de la acest furnizor" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Procentul de majorare al furnizorului" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Numele acestui vânzător" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Numele furnizorului" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "fișier de răspuns" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "ultimul răspuns de prelucrare al vânzătorului" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Calea fișierului de integrare al furnizorului" + +#: core/models.py:154 +msgid "integration path" +msgstr "Calea de integrare" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1417,27 +1425,27 @@ msgstr "" "Aceasta acceptă operațiuni exportate prin mixins și oferă personalizarea " "metadatelor în scopuri administrative." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Identificator intern de etichetă pentru eticheta produsului" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Nume etichetă" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Nume ușor de utilizat pentru eticheta produsului" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Nume afișare etichetă" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Etichetă produs" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1448,15 +1456,15 @@ msgstr "" "și clasificarea produselor. Aceasta include atribute pentru un identificator" " intern al etichetei și un nume de afișare ușor de utilizat." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "etichetă de categorie" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "Etichete de categorie" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1478,52 +1486,52 @@ msgstr "" " administratorilor să specifice numele, descrierea și ierarhia categoriilor," " precum și să atribuie atribute precum imagini, etichete sau prioritate." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Încărcați o imagine care reprezintă această categorie" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Categorie imagine" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" "Definiți un procent de majorare pentru produsele din această categorie" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Părinte al acestei categorii pentru a forma o structură ierarhică" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Categoria de părinți" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Numele categoriei" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Furnizați un nume pentru această categorie" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Adăugați o descriere detaliată pentru această categorie" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Descriere categorie" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "etichete care ajută la descrierea sau gruparea acestei categorii" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioritate" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1537,47 +1545,47 @@ msgstr "" "Aceasta permite organizarea și reprezentarea datelor legate de marcă în " "cadrul aplicației." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Denumirea acestui brand" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Nume de marcă" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Încărcați un logo care reprezintă acest brand" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Brand imagine mică" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Încărcați un logo mare care reprezintă acest brand" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Imagine de marcă mare" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Adăugați o descriere detaliată a mărcii" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Descrierea mărcii" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Categorii opționale cu care acest brand este asociat" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Categorii" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1593,68 +1601,68 @@ msgstr "" "parte din sistemul de gestionare a stocurilor pentru a permite urmărirea și " "evaluarea produselor disponibile de la diverși furnizori." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Furnizor asociat" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Prețul de vânzare" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Produs asociat" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "SKU al furnizorului" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Fișier digital" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Intrări pe stoc" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1675,51 +1683,51 @@ msgstr "" " îmbunătăți performanța. Este utilizată pentru a defini și manipula datele " "despre produse și informațiile asociate acestora în cadrul unei aplicații." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Categoria din care face parte acest produs" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Opțional, asociați acest produs cu un brand" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Indică dacă acest produs este livrat digital" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Produsul este digital" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Furnizați o denumire clară de identificare a produsului" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Denumirea produsului" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Descrierea produsului" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Numărul piesei pentru acest produs" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Numărul piesei" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Stock Keeping Unit pentru acest produs" @@ -1787,11 +1795,11 @@ msgstr "Denumirea acestui atribut" msgid "attribute's name" msgstr "Numele atributului" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "este filtrabil" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Atributele și valorile care pot fi utilizate pentru filtrarea acestei " @@ -1851,27 +1859,27 @@ msgstr "Textul alt al imaginii" msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Imaginea produsului" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Prioritatea afișării" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Imagini ale produsului" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1887,39 +1895,39 @@ msgstr "" "asocierea acesteia la produsele aplicabile. Se integrează cu catalogul de " "produse pentru a determina articolele afectate în cadrul campaniei." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Procent de reducere" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Numele promoției" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Descrierea promoției" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Produse incluse" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promovare" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1932,23 +1940,23 @@ msgstr "" "precum și operațiuni pentru adăugarea și eliminarea mai multor produse " "simultan." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Lista dorințelor" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1965,19 +1973,19 @@ msgstr "" "funcționalitatea mixinilor specifici și oferă caracteristici personalizate " "suplimentare." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Documentar" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Documentare" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Nerezolvat" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1999,59 +2007,59 @@ msgstr "" "unei adrese cu un utilizator, facilitând gestionarea personalizată a " "datelor." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Linia de adresă pentru client" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Linia de adresă" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Strada" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Districtul" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Oraș" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Regiunea" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Cod poștal" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Țara" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Punct de geolocație (longitudine, latitudine)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Răspuns JSON complet de la geocoder pentru această adresă" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Răspuns JSON stocat de la serviciul de geocodare" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adresă" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adrese" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2069,73 +2077,73 @@ msgstr "" " a codului promoțional la o comandă, asigurându-se în același timp că sunt " "respectate constrângerile." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Cod unic utilizat de un utilizator pentru a răscumpăra o reducere" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Reducere procentuală" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Momentul în care codul promoțional a fost utilizat, gol dacă nu a fost " "utilizat încă" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Utilizator atribuit" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Cod promoțional" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Coduri promoționale" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2143,16 +2151,16 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tip de reducere invalid pentru codul promoțional {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2169,140 +2177,140 @@ msgstr "" "de expediere sau de facturare. În egală măsură, funcționalitatea sprijină " "gestionarea produselor în ciclul de viață al comenzii." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Adresa de facturare utilizată pentru această comandă" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Cod promoțional opțional aplicat la această comandă" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Cod promoțional aplicat" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Adresa de expediere utilizată pentru această comandă" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Adresa de expediere" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Stadiul actual al comenzii în ciclul său de viață" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Stadiul comenzii" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Structura JSON a notificărilor care urmează să fie afișate utilizatorilor, " "în interfața de administrare este utilizată vizualizarea tabelară" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Reprezentarea JSON a atributelor comenzii pentru această comandă" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Utilizatorul care a plasat comanda" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Utilizator" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Momentul în care comanda a fost finalizată" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Cumpărați timp" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Un identificator ușor de citit pentru comandă" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID lizibil de către om" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Comandă" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" "Un utilizator trebuie să aibă un singur ordin în așteptare la un moment dat!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "Nu puteți adăuga produse la o comandă care nu este în așteptare" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Nu puteți adăuga mai multe produse decât cele disponibile în stoc" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Puteți cumpăra numai produse fizice cu adresa de expediere specificată!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adresa nu există" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Nu puteți achiziționa în acest moment, vă rugăm să încercați din nou în " "câteva minute." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Un utilizator fără sold nu poate cumpăra cu sold!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2310,7 +2318,7 @@ msgstr "" "nu puteți cumpăra fără înregistrare, vă rugăm să furnizați următoarele " "informații: nume client, e-mail client, număr de telefon client" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2318,7 +2326,7 @@ msgstr "" "Metodă de plată invalidă: {payment_method} de la " "{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2341,110 +2349,110 @@ msgstr "" "produsele digitale. Modelul se integrează cu modelele Order și Product și " "stochează o referință la acestea." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Prețul plătit de client pentru acest produs la momentul achiziției" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Observații interne" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Ordinul părinților" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Cantitatea produsului" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Starea liniei de produse" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Comandaprodusul trebuie să aibă o comandă asociată!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Acțiune greșită specificată pentru feedback: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "" "Nu puteți elimina produse dintr-o comandă care nu este o comandă în curs" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Nume și prenume" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "Adresa URL a integrării" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Acreditări de autentificare" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Puteți avea un singur furnizor CRM implicit" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM-uri" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Legătura CRM a comenzii" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Legături CRM pentru comenzi" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2461,15 +2469,15 @@ msgstr "" "adrese URL pentru descărcarea activului atunci când comanda asociată este în" " stare finalizată." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Descărcare" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Descărcări" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2484,65 +2492,57 @@ msgstr "" "un rating atribuit de utilizator. Clasa utilizează câmpuri din baza de date " "pentru a modela și gestiona în mod eficient datele de feedback." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" "Comentarii furnizate de utilizatori cu privire la experiența lor cu produsul" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Comentarii de feedback" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Face referire la produsul specific dintr-o comandă despre care este vorba în" " acest feedback" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Produs aferent comenzii" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Rating atribuit de utilizator pentru produs" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Evaluarea produsului" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "trebuie să furnizați un comentariu, un rating și uuid-ul produsului comandat" " pentru a adăuga feedback." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Eroare în timpul creării codului promoțional: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Acasă" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Contactați-ne" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Despre noi" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Informații privind plata" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Livrare" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2718,11 +2718,11 @@ msgstr "" "toate drepturile\n" " rezervate" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Sunt necesare atât datele, cât și timpul de așteptare" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Valoare timeout invalidă, trebuie să fie între 0 și 216000 secunde" @@ -2754,7 +2754,7 @@ msgstr "Nu aveți permisiunea de a efectua această acțiune." msgid "NOMINATIM_URL must be configured." msgstr "Parametrul NOMINATIM_URL trebuie să fie configurat!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2817,15 +2817,23 @@ msgstr "Gestionează interogările de căutare globală." msgid "Handles the logic of buying as a business without registration." msgstr "Gestionează logica cumpărării ca o afacere fără înregistrare." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid este necesar" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Puteți descărca activul digital o singură dată" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "comanda trebuie plătită înainte de descărcarea activului digital" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Produsul de comandă nu are un produs" + +#: core/views.py:359 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." @@ -2833,11 +2841,11 @@ 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ă." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2845,7 +2853,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ă." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2856,7 +2864,11 @@ msgstr "" " index a interfeței de administrare Django. Aceasta utilizează funcția " "`redirect` din Django pentru gestionarea redirecționării HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Returnează versiunea curentă a eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2871,7 +2883,7 @@ msgstr "" "dinamice în funcție de acțiunea curentă, permisiuni personalizabile și " "formate de redare." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2885,7 +2897,7 @@ msgstr "" "stratul API al aplicației și oferă o modalitate standardizată de a procesa " "cererile și răspunsurile pentru datele AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2901,7 +2913,7 @@ msgstr "" "cum ar fi filtrarea după câmpuri specifice sau recuperarea de informații " "detaliate sau simplificate în funcție de cerere." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2916,7 +2928,7 @@ msgstr "" "serializatoare adecvate pentru diferite acțiuni. Capacitățile de filtrare " "sunt furnizate prin DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2931,7 +2943,7 @@ msgstr "" "permisiuni pentru a se asigura că numai utilizatorii autorizați pot accesa " "date specifice." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2943,7 +2955,7 @@ msgstr "" "serializarea obiectelor Brand. Utilizează cadrul ViewSet al Django pentru a " "simplifica implementarea punctelor finale API pentru obiectele Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2961,7 +2973,7 @@ msgstr "" "metode pentru recuperarea detaliilor produsului, aplicarea permisiunilor și " "accesarea feedback-ului aferent unui produs." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2976,7 +2988,7 @@ msgstr "" "acestei clase este de a oferi acces simplificat la resursele legate de " "Vendor prin intermediul cadrului REST Django." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2993,7 +3005,7 @@ msgstr "" "Feedback accesibile. Aceasta extinde clasa de bază `EvibesViewSet` și " "utilizează sistemul de filtrare Django pentru interogarea datelor." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3013,7 +3025,7 @@ msgstr "" "de acțiunea specifică efectuată și aplică permisiunile corespunzătoare în " "timpul interacțiunii cu datele comenzii." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3028,12 +3040,12 @@ msgstr "" "solicitată. În plus, oferă o acțiune detaliată pentru gestionarea feedback-" "ului privind instanțele OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" "Gestionează operațiunile legate de imaginile produselor din aplicație." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3041,16 +3053,16 @@ msgstr "" "Gestionează recuperarea și gestionarea instanțelor PromoCode prin diverse " "acțiuni API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Reprezintă un set de vizualizări pentru gestionarea promoțiilor." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "" "Gestionează operațiunile legate de datele privind stocurile din sistem." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3069,7 +3081,7 @@ msgstr "" "utilizatorii își pot gestiona doar propriile liste de dorințe, cu excepția " "cazului în care sunt acordate permisiuni explicite." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3084,12 +3096,12 @@ msgstr "" "serializatorului și gestionarea permisiunilor în funcție de contextul " "cererii." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Eroare de geocodare: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo index 37d97b9154cabdde5a29f2eb629f43a2ba785cfd..dbaf9d2959b504e8cd4205215eb4f9a2ff541a7e 100644 GIT binary patch delta 13111 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 Kq`cv+&HY~+eT-fJ delta 12813 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 diff --git a/core/locale/ru_RU/LC_MESSAGES/django.po b/core/locale/ru_RU/LC_MESSAGES/django.po index cf04f70d..21b3821d 100644 --- a/core/locale/ru_RU/LC_MESSAGES/django.po +++ b/core/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Изображение" msgid "images" msgstr "Изображения" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Наличие" @@ -118,11 +118,11 @@ msgstr "Наличие" msgid "stocks" msgstr "Наличия" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Заказанный товар" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Заказанные товары" @@ -130,7 +130,7 @@ msgstr "Заказанные товары" msgid "children" msgstr "Дети" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Конфигурация" @@ -182,7 +182,7 @@ msgstr "Моментальный" msgid "successful" msgstr "Успешный" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Ввод/вывод кэша" @@ -206,7 +206,7 @@ msgstr "Получите параметры приложения, которые msgid "send a message to the support team" msgstr "Отправьте сообщение в службу поддержки" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Запросите URL-адрес с поддержкой CORS. Допускается только https." @@ -453,7 +453,7 @@ msgstr "" "завершается с использованием баланса пользователя; если используется " "`force_payment`, инициируется транзакция." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "приобретение заказа без создания учетной записи" @@ -750,235 +750,235 @@ msgstr "удалить отношение \"заказ-продукт" msgid "add or remove feedback on an order–product relation" msgstr "добавлять или удалять отзывы о связи заказ-продукт" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Поиск" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Имя" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Категории" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Категории Слизни" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Теги" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Мин. цена" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Максимальная цена" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Активен" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Бренд" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Атрибуты" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Количество" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Слаг" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Цифровой" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Включите подкатегории" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Включите продукты, заказанные лично" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "Артикул" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Для использования флага include_subcategories должен быть указан " "category_uuid." -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Поиск (идентификатор, название продукта или номер детали)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Куплено после (включительно)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Куплено ранее (включительно)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Электронная почта пользователя" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID пользователя" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Статус" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Человекочитаемый идентификатор" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Родитель" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Вся категория (есть хотя бы 1 продукт или нет)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Уровень" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "UUID продукта" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Ключ, который нужно найти в тайнике или вложить в него" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Данные для хранения в кэше" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Тайм-аут в секундах для занесения данных в кэш" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Кэшированные данные" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-данные из запрашиваемого URL" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Добавить товар в заказ" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Заказ {order_uuid} не найден!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Удалить все товары из заказа" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Купить заказ" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Пожалуйста, укажите либо order_uuid, либо order_hr_id - взаимоисключающие " "варианты!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Выполните действие над списком товаров в заказе" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Удалить/добавить" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Действие должно быть либо \"добавить\", либо \"удалить\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Выполните действие над списком продуктов в списке желаний" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Пожалуйста, укажите значение `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Список желаний {wishlist_uuid} не найден!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Добавить товар в заказ" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Удалить продукт из заказа" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Купить заказ" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -986,41 +986,41 @@ msgstr "" "Пожалуйста, отправьте атрибуты в виде строки, отформатированной как " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Добавить или удалить отзыв для продукта заказа" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Действие должно быть либо `add`, либо `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Заказ товара {order_product_uuid} не найден!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Оригинальная строка адреса, предоставленная пользователем" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Предел должен быть от 1 до 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - работает как шарм" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Атрибуты" @@ -1033,11 +1033,11 @@ msgid "groups of attributes" msgstr "Группы атрибутов" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Категории" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Бренды" @@ -1046,7 +1046,7 @@ msgid "category image url" msgstr "Категории" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Процент наценки" @@ -1070,7 +1070,7 @@ msgstr "Теги для этой категории" msgid "products in this category" msgstr "Продукты в этой категории" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Поставщики" @@ -1096,7 +1096,7 @@ msgid "represents feedback from a user." msgstr "Представляет собой отзыв пользователя." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Уведомления" @@ -1104,7 +1104,7 @@ msgstr "Уведомления" msgid "download url for this order product if applicable" msgstr "Если применимо, загрузите url для этого продукта заказа" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Обратная связь" @@ -1112,7 +1112,7 @@ msgstr "Обратная связь" msgid "a list of order products in this order" msgstr "Список товаров, заказанных в этом заказе" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Адрес для выставления счетов" @@ -1140,7 +1140,7 @@ msgstr "Все ли товары в заказе представлены в ц msgid "transactions for this order" msgstr "Операции для этого заказа" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Заказы" @@ -1152,19 +1152,19 @@ msgstr "URL-адрес изображения" msgid "product's images" msgstr "Изображения товара" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Категория" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Отзывы" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Бренд" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Группы атрибутов" @@ -1192,7 +1192,7 @@ msgstr "Количество отзывов" msgid "only available for personal orders" msgstr "Продукты доступны только для личных заказов" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Товары" @@ -1204,15 +1204,15 @@ msgstr "Промокоды" msgid "products on sale" msgstr "Продукты в продаже" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Промоакции" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Поставщик" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1220,11 +1220,11 @@ msgstr "Поставщик" msgid "product" msgstr "Товар" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Списки желаний" @@ -1232,7 +1232,7 @@ msgstr "Списки желаний" msgid "tagged products" msgstr "Tagged products" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Теги товара" @@ -1319,7 +1319,7 @@ msgstr "Результаты поиска товаров" msgid "posts search results" msgstr "Результаты поиска товаров" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1332,23 +1332,23 @@ msgstr "" "быть полезно для категоризации и более эффективного управления атрибутами в " "сложной системе." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Родитель этой группы" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Родительская группа атрибутов" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Имя группы атрибутов" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Группа атрибутов" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1367,41 +1367,49 @@ msgstr "" "метаданные и ограничения, что делает ее пригодной для использования в " "системах, взаимодействующих со сторонними поставщиками." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Хранит учетные данные и конечные точки, необходимые для взаимодействия с API" " поставщика." -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Информация об аутентификации" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Определите наценку для товаров, полученных от этого продавца" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Процент наценки поставщика" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Имя этого продавца" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Название поставщика" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "файл ответа" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "последний ответ поставщика на обработку" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Путь к файлу интеграции поставщика" + +#: core/models.py:154 +msgid "integration path" +msgstr "Путь интеграции" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1416,27 +1424,27 @@ msgstr "" "экспортируемые через миксины, и обеспечивает настройку метаданных для " "административных целей." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Внутренний идентификатор тега для тега продукта" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Название тега" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Удобное название для метки продукта" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Отображаемое имя тега" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Метка продукта" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1447,15 +1455,15 @@ msgstr "" "классификации продуктов. Он включает атрибуты для внутреннего идентификатора" " тега и удобного для пользователя отображаемого имени." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "тег категории" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "теги категорий" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1477,51 +1485,51 @@ msgstr "" "администраторам указывать название, описание и иерархию категорий, а также " "назначать атрибуты, такие как изображения, теги или приоритет." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Загрузите изображение, представляющее эту категорию" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Изображение категории" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Определите процент наценки для товаров в этой категории" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Родитель данной категории для формирования иерархической структуры" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Родительская категория" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Название категории" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Укажите название этой категории" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Добавьте подробное описание для этой категории" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Описание категории" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "теги, которые помогают описать или сгруппировать эту категорию" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Приоритет" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1534,47 +1542,47 @@ msgstr "" "связанные категории, уникальную метку и порядок приоритетов. Он позволяет " "организовать и представить данные, связанные с брендом, в приложении." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Название этой марки" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Название бренда" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Загрузите логотип, представляющий этот бренд" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Маленький образ бренда" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Загрузите большой логотип, представляющий этот бренд" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Большой имидж бренда" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Добавьте подробное описание бренда" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Описание бренда" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Дополнительные категории, с которыми ассоциируется этот бренд" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Категории" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1590,68 +1598,68 @@ msgstr "" "активы. Он является частью системы управления запасами, позволяющей " "отслеживать и оценивать продукты, доступные у различных поставщиков." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Цена продажи" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Сопутствующий товар" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Количество на складе" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Артикул поставщика" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Цифровой файл" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Наличия" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1672,51 +1680,51 @@ msgstr "" "повышения производительности. Он используется для определения и " "манипулирования данными о товаре и связанной с ним информацией в приложении." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Категория, к которой относится этот продукт" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "По желанию ассоциируйте этот продукт с брендом" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Указывает, поставляется ли этот продукт в цифровом виде" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Является ли продукт цифровым" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Обеспечьте четкое идентификационное название продукта" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Название продукта" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Описание товара" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Парт. номер для данного товара" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Парт. номер" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Единица складского учета для данного продукта" @@ -1785,11 +1793,11 @@ msgstr "Имя этого атрибута" msgid "attribute's name" msgstr "Имя атрибута" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "поддается фильтрации" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Какие атрибуты и значения можно использовать для фильтрации этой категории." @@ -1849,27 +1857,27 @@ msgstr "Альтовый текст изображения" msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Изображение продукта" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Приоритет отображения" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Изображения товаров" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1885,39 +1893,39 @@ msgstr "" "акции и привязки ее к соответствующим товарам. Он интегрируется с каталогом " "товаров для определения товаров, на которые распространяется акция." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Процент скидки" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Название акции" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Описание акции" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Включенные продукты" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Продвижение" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1930,23 +1938,23 @@ msgstr "" "товаров, а также поддерживая операции добавления и удаления нескольких " "товаров одновременно." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Список желаний" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1962,19 +1970,19 @@ msgstr "" "документальных файлов. Он расширяет функциональность определенных миксинов и" " предоставляет дополнительные пользовательские возможности." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Документальный фильм" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Документальные фильмы" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Неразрешенные" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1995,59 +2003,59 @@ msgstr "" "обработки или проверки. Класс также позволяет ассоциировать адрес с " "пользователем, что облегчает работу с персонализированными данными." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Адресная строка для клиента" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Адресная строка" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Улица" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Округ" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Город" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Регион" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Почтовый индекс" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Страна" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Геолокационная точка(долгота, широта)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Полный JSON-ответ от геокодера для этого адреса" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Сохраненный JSON-ответ от сервиса геокодирования" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Адрес" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Адреса" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2064,74 +2072,74 @@ msgstr "" "функциональность для проверки и применения промокода к заказу, обеспечивая " "при этом соблюдение ограничений." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Процентная скидка" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Время окончания срока действия" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Время начала действия" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Временная метка использования" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Назначенный пользователь" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Промокод" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Промокоды" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2139,16 +2147,16 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Промокоды" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2165,138 +2173,138 @@ msgstr "" "доставке или выставлении счета. Кроме того, функциональность поддерживает " "управление продуктами в жизненном цикле заказа." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Адрес для выставления счетов, используемый для данного заказа" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Дополнительный промокод, применяемый к этому заказу" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Примененный промокод" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Адрес доставки, используемый для данного заказа" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Адрес доставки" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Текущий статус заказа в его жизненном цикле" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Статус заказа" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" " интерфейсе используется табличный вид" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON-представление атрибутов заказа для этого заказа" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Пользователь, разместивший заказ" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Пользователь" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Временная метка, когда заказ был завершен" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Время покупки" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Человекочитаемый идентификатор для заказа" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "человекочитаемый идентификатор" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Заказ" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Пользователь может одновременно иметь только один отложенный ордер!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует с запросом <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Промокод не существует" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Вы можете купить физические товары только с указанным адресом доставки!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Адрес не существует" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Вы не можете купить заказ без пользователя!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Пользователь без баланса не может покупать с балансом!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2304,14 +2312,14 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Неверный способ оплаты: {payment_method} от {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2333,109 +2341,109 @@ msgstr "" "для цифровых продуктов. Модель интегрируется с моделями Order и Product и " "хранит ссылки на них." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Внутренние комментарии" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Уведомления пользователей" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Родительский приказ" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Количество продукта" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "У заказанного продукта должен быть связанный с ним заказ!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Для обратной связи указано неверное действие: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "Вы не можете отозвать заказ, который не был получен" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Имя" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL-адрес интеграции" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Учетные данные для аутентификации" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "У вас может быть только один поставщик CRM по умолчанию" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Ссылка на CRM заказа" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Ссылки на CRM заказов" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2451,15 +2459,15 @@ msgstr "" " общедоступным. Он включает метод для генерации URL-адреса для загрузки " "актива, когда связанный заказ находится в состоянии завершения." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Скачать" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Скачать" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2474,63 +2482,55 @@ msgstr "" "пользователем. Класс использует поля базы данных для эффективного " "моделирования и управления данными отзывов." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Комментарии пользователей об их опыте использования продукта" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Комментарии к отзывам" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Ссылка на конкретный продукт в заказе, о котором идет речь в этом отзыве" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Сопутствующий товар для заказа" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Присвоенный пользователем рейтинг продукта" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Рейтинг продукции" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "чтобы добавить отзыв, необходимо указать комментарий, рейтинг и uuid " "продукта заказа." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Ошибка при создании промокода: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Главная" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Свяжитесь с нами" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "О нас" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Информация об оплате" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Доставка" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2705,11 +2705,11 @@ msgstr "" "все права\n" " защищены" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Требуются как данные, так и тайм-аут" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Неверное значение тайм-аута, оно должно находиться в диапазоне от 0 до " @@ -2743,7 +2743,7 @@ msgstr "У вас нет разрешения на выполнение этог msgid "NOMINATIM_URL must be configured." msgstr "Параметр NOMINATIM_URL должен быть настроен!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2806,15 +2806,23 @@ msgstr "Обрабатывает глобальные поисковые зап msgid "Handles the logic of buying as a business without registration." msgstr "Работает с логикой покупки как бизнеса без регистрации." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "требуется order_product_uuid" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Вы можете загрузить цифровой актив только один раз" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "заказ должен быть оплачен до загрузки цифрового актива" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "У заказанного продукта нет продукта" + +#: core/views.py:359 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." @@ -2822,11 +2830,11 @@ msgstr "" "Обрабатывает загрузку цифрового актива, связанного с заказом.\n" "Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon не найден" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2834,7 +2842,7 @@ msgstr "" "Обрабатывает запросы на фавикон веб-сайта.\n" "Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2845,7 +2853,11 @@ msgstr "" "администратора Django. Для обработки HTTP-перенаправления используется " "функция Django `redirect`." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Возвращает текущую версию eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2859,7 +2871,7 @@ msgstr "" " включает в себя поддержку динамических классов сериализаторов в зависимости" " от текущего действия, настраиваемые разрешения и форматы рендеринга." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2873,7 +2885,7 @@ msgstr "" "уровня API приложения и обеспечивает стандартизированный способ обработки " "запросов и ответов на данные AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2889,7 +2901,7 @@ msgstr "" "например, фильтровать по определенным полям или получать подробную или " "упрощенную информацию в зависимости от запроса." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2904,7 +2916,7 @@ msgstr "" "соответствующие сериализаторы для различных действий. Возможности фильтрации" " предоставляются через DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2919,7 +2931,7 @@ msgstr "" "чтобы только авторизованные пользователи могли получить доступ к " "определенным данным." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2931,7 +2943,7 @@ msgstr "" "сериализации объектов Brand. Он использует фреймворк Django ViewSet для " "упрощения реализации конечных точек API для объектов Brand." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2949,7 +2961,7 @@ msgstr "" "методы для получения информации о продукте, применения разрешений и доступа " "к связанным отзывам о продукте." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2964,7 +2976,7 @@ msgstr "" "класса - обеспечить упрощенный доступ к ресурсам, связанным с Vendor, через " "фреймворк Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2981,7 +2993,7 @@ msgstr "" "доступа. Он расширяет базовый `EvibesViewSet` и использует систему " "фильтрации Django для запроса данных." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -3002,7 +3014,7 @@ msgstr "" "соответствующим образом устанавливает разрешения при взаимодействии с " "данными заказа." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3017,12 +3029,12 @@ msgstr "" " от запрашиваемого действия. Кроме того, он предоставляет подробное действие" " для обработки отзывов об экземплярах OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "" "Управляет операциями, связанными с изображениями продуктов в приложении." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3030,16 +3042,16 @@ msgstr "" "Управляет получением и обработкой экземпляров PromoCode с помощью различных " "действий API." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "" "Представляет собой набор представлений для управления рекламными акциями." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Выполняет операции, связанные с данными о запасах в системе." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3057,7 +3069,7 @@ msgstr "" "проверка прав доступа гарантирует, что пользователи смогут управлять только " "своими списками желаний, если не предоставлены явные права." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3072,12 +3084,12 @@ msgstr "" "методов HTTP, переопределение сериализатора и обработку разрешений в " "зависимости от контекста запроса." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Ошибка геокодирования: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/sv_SE/LC_MESSAGES/django.mo b/core/locale/sv_SE/LC_MESSAGES/django.mo index 4fe54ffd432d923e53b4ecc4b5783828a9df0ff6..e0c2c2dd018f4575d1732c0d85809856453dfd43 100644 GIT binary patch delta 13095 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 delta 12821 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ϜP;&&SBYC-x7Jmt$7GY&PJg(%nMN4!b2b$LzANYWjMcSvs`78Bo*KR|e2 z<_}$;V@~2SQI}3Np=>w7LN{GeC*&d08JE_8zTGA%q^OtCqH&xw1aixC}( zP(s(+gchX^Ikvtjz-Jo}lU=>mpUFX{9)+!4;Sqe54_qKBQLd{Y{ziE_ffm0iGk#+(l+DzlQLajV>!ybD@p96pbVKjL{=i0GX1+y z7A%EDa2t_veMo|H<$tdwE~Wp|t3i~{A%7Qj^d7`7F)LB&h0g?%p6DBYD)^o-!(8QR z@;Y)$kpIG!ts#GrbbTH$m~<$iLn_hL>!f_~(m&S~pzeVy)K9g|FEm)~KKBjZKPHjJ zy4DgpYWurNl@%qu3d4vcq#qNbh@<3>6OBlBC7Kc&$+sn*5_Py|CDgT^x{T`_iKaw5 zq6lrOX#dZqftScfdKvPI%zQ@tf7f&hJ5l!&@gFhLHCjuWZ&lxK!{L~5{X$|K`9Amx zrn`zMr00?LZY1%XFhp~rHgSc>N6{YCl|=mNOW8kiQ{I~xOUxqPAaq6X0@p|flh#=u zK>Ax;Na*^;Vv19qm$voz{oyM*O~Fl4_lPs3b$w*<{o}HdIrsqIp1!Lhf9@eZClV;{ zfv*#~vXS3RyHTWf5VMJ6#2>`}y+ZZxzxQbzMd&XMx+1wj1@gLlKg*DBDwEfhU2>|v zz5Z}l2sU$dN!%kBq3Z*p4RM^hb;Nt5Hz2=N?E3!`^^G=|g7L&pr2DASU2*P4?I~O8 z$^t06O*-1;Gf|h7NF;xS=<>qnhmu}InZ7+EN#7uTAu4hY-}q;vqB-#&afgb^IGNZ= zI^%jmq9HMXm_a;qbwhAIk)N36%IZhx&;>ncV3 zNZ~4?GZ8|3Py9vX^tIqCm-Gpjeu;D~I*>;G2JwivL+mGX6{7BE%;@6@+Mn^&@V!s^ zGU)@veLcT|tC;HS>->_2s$YZt?oR)bK1XC+b4mX|93~=&XH-lgR%A4Arc#%gbS=zI z6edb?Pw%%Rbj4fDC(aC#UHuOfyhYq3Uo_*j$ZsPO2wi0eKkAclA!fnr7(@GyP}hfe zjQElCMZI4gGCPP(6m%vo5&MX*i2lUKM8*|MyI^kSd7%R{DBD8l%1!wnq`xNpFHwT{ z+0~Ks{WnFKMp?Y?9*l30O1MrFu@rW}((VDpups&G2wkrbZxGceui@ILJmcy}ViqyQ z6=dc?k4fjG?P$__NteP+gs!7r5;a^VoJOy@v?@!w^h(k-sjH><6Zg3+w3|t~Db~ky;)tH#jYgBm^u})3mw2Dh|3kt&yhZtP)HT53 z`+cuuPs*dP2fjtTM=W=3a^d?fEy@wEQUBuAOz)qc2k9z|dtYeKko2!E??>Gn(ti^v zwz+vgx+dwfE}uX?kaoB6A!X4x2IGjbq;(x629hqUOu3YiJc2Z;LRk9w*gJXi^>}kYO6suCCaHY}4jIs6Siga(>4zG%4Np%@y;CH;&a`=f>G$Sj z4N5PydTc=Y{!b6&$kIH8Tl7dBnm%slrTjs4Q-<|;J+)tI-=Y0pxI@>Iev#>KKfV{T eV@i-`N|qf}ihBkY+HoS*vp8_a+}fUUf&T-Xc11=2 diff --git a/core/locale/sv_SE/LC_MESSAGES/django.po b/core/locale/sv_SE/LC_MESSAGES/django.po index 099ac2b4..03dcf7f6 100644 --- a/core/locale/sv_SE/LC_MESSAGES/django.po +++ b/core/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -108,7 +108,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stock" @@ -116,11 +116,11 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Beställ produkt" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Beställ produkter" @@ -128,7 +128,7 @@ msgstr "Beställ produkter" msgid "children" msgstr "Barn och ungdomar" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfig" @@ -180,7 +180,7 @@ msgstr "Momental" msgid "successful" msgstr "Framgångsrik" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Cache I/O" @@ -204,7 +204,7 @@ msgstr "Hämta applikationens exponerbara parametrar" msgid "send a message to the support team" msgstr "Skicka ett meddelande till supportteamet" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Begär en CORSed URL. Endast https tillåtet." @@ -438,7 +438,7 @@ msgstr "" "Slutför orderköpet. Om `force_balance` används, slutförs köpet med " "användarens saldo; Om `force_payment` används, initieras en transaktion." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "köpa en order utan att skapa ett konto" @@ -732,276 +732,276 @@ msgstr "ta bort en order-produktrelation" msgid "add or remove feedback on an order–product relation" msgstr "lägga till eller ta bort feedback om en order-produktrelation" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Ingen sökterm angavs." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Sök" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Namn" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategorier" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategorier Sniglar" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Etiketter" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Min pris" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Max pris" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Är aktiv" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Varumärke" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Attribut" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Kvantitet" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Snigel" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Är digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Inkludera underkategorier" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Inkludera personligt beställda produkter" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "Det måste finnas en category_uuid för att använda flaggan " "include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Sök (ID, produktnamn eller artikelnummer)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Köpt efter (inklusive)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Köpt tidigare (inklusive)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Användarens e-post" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "Användarens UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Status" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Human Readable ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Förälder" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Hela kategorin (har minst 1 produkt eller inte)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Nivå" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Produktens UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Nyckel att leta efter i eller sätta in i cachen" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Data som ska lagras i cacheminnet" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Timeout i sekunder för att lägga data i cacheminnet" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Cachad data" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "Cameliserad JSON-data från den begärda URL:en" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Endast webbadresser som börjar med http(s):// är tillåtna" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Lägg till en produkt i ordern" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Order {order_uuid} hittades inte!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Ta bort alla produkter från ordern" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Köpa en order" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vänligen ange antingen order_uuid eller order_hr_id - ömsesidigt " "uteslutande!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Fel typ kom från order.buy()-metoden: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Utför en åtgärd på en lista med produkter i ordern" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Ta bort/lägga till" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Åtgärden måste vara antingen \"lägg till\" eller \"ta bort\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "Utför en åtgärd på en lista med produkter i önskelistan" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vänligen ange värdet för `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Önskelista {wishlist_uuid} hittades inte!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Lägg till en produkt i ordern" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Ta bort en produkt från ordern" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Köpa en order" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "Skicka attributen som en sträng formaterad som attr1=värde1,attr2=värde2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Lägg till eller ta bort en feedback för orderprodukten" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Åtgärden måste vara antingen `add` eller `remove`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderprodukt {order_product_uuid} hittades inte!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Originaladresssträng som tillhandahålls av användaren" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Gränsen måste vara mellan 1 och 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - fungerar som en smäck" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Attribut" @@ -1014,11 +1014,11 @@ msgid "groups of attributes" msgstr "Grupper av attribut" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategorier" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Brands" @@ -1027,7 +1027,7 @@ msgid "category image url" msgstr "Kategorier" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Procentuell påslagning" @@ -1050,7 +1050,7 @@ msgstr "Taggar för denna kategori" msgid "products in this category" msgstr "Produkter i denna kategori" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Leverantörer" @@ -1075,7 +1075,7 @@ msgid "represents feedback from a user." msgstr "Representerar feedback från en användare." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Meddelanden" @@ -1083,7 +1083,7 @@ msgstr "Meddelanden" msgid "download url for this order product if applicable" msgstr "Nedladdningsadress för denna orderprodukt om tillämpligt" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Återkoppling" @@ -1091,7 +1091,7 @@ msgstr "Återkoppling" msgid "a list of order products in this order" msgstr "En lista över orderprodukter i den här ordern" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Faktureringsadress" @@ -1119,7 +1119,7 @@ msgstr "Är alla produkter i beställningen digitala" msgid "transactions for this order" msgstr "Transaktioner för denna order" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Beställningar" @@ -1131,19 +1131,19 @@ msgstr "URL för bild" msgid "product's images" msgstr "Produktens bilder" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Återkoppling" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Varumärke" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Attributgrupper" @@ -1171,7 +1171,7 @@ msgstr "Antal återkopplingar" msgid "only available for personal orders" msgstr "Produkter endast tillgängliga för personliga beställningar" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Produkter" @@ -1183,15 +1183,15 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter på rea" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Kampanjer" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Leverantör" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1199,11 +1199,11 @@ msgstr "Leverantör" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Önskelistade produkter" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Önskelistor" @@ -1211,7 +1211,7 @@ msgstr "Önskelistor" msgid "tagged products" msgstr "Taggade produkter" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Produkttaggar" @@ -1296,7 +1296,7 @@ msgstr "Sökresultat för produkter" msgid "posts search results" msgstr "Sökresultat för produkter" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1309,23 +1309,23 @@ msgstr "" "användbart för att kategorisera och hantera attribut på ett mer effektivt " "sätt i ett komplext system." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Förälder till denna grupp" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Överordnad attributgrupp" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Attributgruppens namn" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Attributgrupp" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1344,42 +1344,50 @@ msgstr "" "metadata och begränsningar, vilket gör den lämplig att använda i system som " "interagerar med tredjepartsleverantörer." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lagrar autentiseringsuppgifter och ändpunkter som krävs för leverantörens " "API-kommunikation" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Autentiseringsinformation" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" "Definiera markeringen för produkter som hämtas från den här leverantören" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Leverantörens påslag i procent" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Namn på denna säljare" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Leverantörens namn" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "svarsfil" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "säljarens senaste bearbetningssvar" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Sökväg till leverantörens integrationsfil" + +#: core/models.py:154 +msgid "integration path" +msgstr "Integrationsväg" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1394,27 +1402,27 @@ msgstr "" "operationer som exporteras via mixins och tillhandahåller metadataanpassning" " för administrativa ändamål." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Intern taggidentifierare för produkttaggen" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tagg namn" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Användarvänligt namn för produkttaggen" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Taggens visningsnamn" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Produktmärkning" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1425,15 +1433,15 @@ msgstr "" "klassificera produkter. Den innehåller attribut för en intern " "taggidentifierare och ett användarvänligt visningsnamn." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "kategori tagg" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "Kategoritaggar" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1455,51 +1463,51 @@ msgstr "" " ange namn, beskrivning och hierarki för kategorier samt tilldela attribut " "som bilder, taggar eller prioritet." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Ladda upp en bild som representerar denna kategori" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Kategori bild" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Definiera en påslagsprocent för produkter i den här kategorin" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Förälder till denna kategori för att bilda en hierarkisk struktur" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Föräldrakategori" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Namn på kategori" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Ange ett namn för denna kategori" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Lägg till en detaljerad beskrivning för denna kategori" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Beskrivning av kategori" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "taggar som hjälper till att beskriva eller gruppera denna kategori" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Prioritet" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1513,47 +1521,47 @@ msgstr "" "prioritetsordning. Den gör det möjligt att organisera och representera " "varumärkesrelaterade data i applikationen." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Namn på detta varumärke" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Varumärke" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Ladda upp en logotyp som representerar detta varumärke" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Varumärke liten image" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Ladda upp en stor logotyp som representerar detta varumärke" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Varumärke med stor image" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Lägg till en detaljerad beskrivning av varumärket" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Varumärkesbeskrivning" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Valfria kategorier som detta varumärke är förknippat med" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategorier" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1569,68 +1577,68 @@ msgstr "" "lagerhanteringssystemet för att möjliggöra spårning och utvärdering av " "produkter som finns tillgängliga från olika leverantörer." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Leverantören som levererar denna produkt lager" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Associerad leverantör" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Slutligt pris till kunden efter påslag" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Försäljningspris" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Produkten som är associerad med denna lagerpost" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Tillhörande produkt" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Det pris som betalats till säljaren för denna produkt" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Leverantörens inköpspris" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Tillgänglig kvantitet av produkten i lager" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Antal i lager" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU som tilldelats av leverantören för identifiering av produkten" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Leverantörens SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Digital fil associerad med detta lager om tillämpligt" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Digital fil" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Lagerposter" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1651,51 +1659,51 @@ msgstr "" "för att definiera och manipulera produktdata och tillhörande information i " "en applikation." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Kategori som denna produkt tillhör" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Möjlighet att associera produkten med ett varumärke" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Taggar som hjälper till att beskriva eller gruppera denna produkt" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Anger om denna produkt levereras digitalt" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Är produkten digital" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Tillhandahålla ett tydligt identifierande namn för produkten" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Produktens namn" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Lägg till en detaljerad beskrivning av produkten" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Produktbeskrivning" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Artikelnummer för denna produkt" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Artikelnummer" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Lagerhållningsenhet för denna produkt" @@ -1763,11 +1771,11 @@ msgstr "Namn på detta attribut" msgid "attribute's name" msgstr "Attributets namn" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "är filtrerbar" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Vilka attribut och värden som kan användas för att filtrera denna kategori." @@ -1826,27 +1834,27 @@ msgstr "Alt-text för bild" msgid "upload the image file for this product" msgstr "Ladda upp bildfilen för den här produkten" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Produktbild" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Bestämmer i vilken ordning bilderna ska visas" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Prioritet för visning" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Den produkt som denna bild representerar" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Produktbilder" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1862,39 +1870,39 @@ msgstr "" "tillämpliga produkterna. Den integreras med produktkatalogen för att " "fastställa vilka artiklar som påverkas av kampanjen." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Procentuell rabatt för de valda produkterna" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Rabattprocent" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Ange ett unikt namn för denna kampanj" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Kampanjens namn" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Beskrivning av kampanjen" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Välj vilka produkter som ingår i denna kampanj" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Inkluderade produkter" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Marknadsföring" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1907,23 +1915,23 @@ msgstr "" "produkter, samt stöd för operationer för att lägga till och ta bort flera " "produkter samtidigt." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Produkter som användaren har markerat som önskade" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Användare som äger denna önskelista" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Wishlist's ägare" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Önskelista" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1939,19 +1947,19 @@ msgstr "" "för dokumentärfilerna. Den utökar funktionaliteten från specifika mixins och" " tillhandahåller ytterligare anpassade funktioner." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Dokumentärfilm" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Dokumentärer" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Olöst" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1972,59 +1980,59 @@ msgstr "" "inspektion. Klassen gör det också möjligt att associera en adress med en " "användare, vilket underlättar personlig datahantering." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Adressrad till kunden" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Adresslinje" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Gata" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Distrikt" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Stad" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Region" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Postnummer" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Land" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Geolokaliseringspunkt (longitud, latitud)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Fullständigt JSON-svar från geokodaren för denna adress" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Lagrad JSON-svar från geokodningstjänsten" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adress" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresser" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2041,72 +2049,72 @@ msgstr "" "funktioner för att validera och tillämpa kampanjkoden på en order och " "samtidigt säkerställa att begränsningarna uppfylls." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Unik kod som används av en användare för att lösa in en rabatt" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Identifierare för kampanjkod" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabattbelopp tillämpas om procent inte används" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Fast diskonteringsbelopp" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentuell rabatt som tillämpas om fast belopp inte används" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Procentuell rabatt" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Tidsstämpel när kampanjkoden upphör att gälla" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Slutgiltig giltighetstid" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Tidsstämpel från vilken denna promokod är giltig" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Start giltighetstid" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Tidsstämpel när kampanjkoden användes, tom om den inte har använts ännu" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Tidsstämpel för användning" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Användare som tilldelats denna promokod om tillämpligt" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Tilldelad användare" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Kampanjkod" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Kampanjkoder" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2114,16 +2122,16 @@ msgstr "" "Endast en typ av rabatt ska definieras (belopp eller procent), men inte båda" " eller ingendera." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promokoden har redan använts" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ogiltig rabattyp för promokod {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2140,136 +2148,136 @@ msgstr "" "faktureringsuppgifter kan uppdateras. På samma sätt stöder funktionaliteten " "hanteringen av produkterna i orderns livscykel." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Den faktureringsadress som används för denna order" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Valfri kampanjkod tillämpas på denna beställning" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Tillämpad kampanjkod" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Den leveransadress som används för denna order" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Leveransadress" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Aktuell status för ordern i dess livscykel" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Orderstatus" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur för meddelanden som ska visas för användare, i admin UI " "används tabellvyn" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "JSON-representation av orderattribut för denna order" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Användaren som gjorde beställningen" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Användare" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Tidsstämpel när ordern slutfördes" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Köp tid" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "En mänskligt läsbar identifierare för ordern" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "mänskligt läsbart ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Beställning" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "En användare får bara ha en väntande order åt gången!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Du kan inte lägga till produkter i en order som inte är en pågående order" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Du kan inte lägga till inaktiva produkter i ordern" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Du kan inte lägga till fler produkter än vad som finns i lager" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Du kan inte ta bort produkter från en order som inte är en pågående order" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} finns inte med frågan <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promokoden finns inte" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "Du kan bara köpa fysiska produkter med angiven leveransadress!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adressen finns inte" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "Du kan inte köpa just nu, vänligen försök igen om några minuter." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Ogiltigt kraftvärde" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Du kan inte köpa en tom order!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Du kan inte köpa en order utan en användare!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "En användare utan balans kan inte köpa med balans!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Otillräckliga medel för att slutföra ordern" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2277,14 +2285,14 @@ msgstr "" "du kan inte köpa utan registrering, vänligen ange följande information: " "kundens namn, kundens e-post, kundens telefonnummer" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Ogiltig betalningsmetod: {payment_method} från {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2306,108 +2314,108 @@ msgstr "" " digitala produkter. Modellen integreras med Order- och Product-modellerna " "och lagrar en referens till dem." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Det pris som kunden betalade för denna produkt vid inköpstillfället" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Inköpspris vid ordertillfället" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Interna kommentarer för administratörer om denna beställda produkt" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Interna kommentarer" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Meddelanden till användare" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "JSON-representation av detta objekts attribut" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Sorterade produktattribut" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Referens till den överordnade order som innehåller denna produkt" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Föräldraorder" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Den specifika produkt som är kopplad till denna orderrad" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Antal av denna specifika produkt i ordern" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Produktens kvantitet" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Aktuell status för denna produkt i ordern" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Status för produktlinje" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderprodukt måste ha en tillhörande order!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Fel åtgärd angiven för återkoppling: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "du kan inte återkoppla en order som inte mottagits" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Namn" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL för integrationen" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Autentiseringsuppgifter" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Du kan bara ha en CRM-leverantör som standard" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM-system" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Beställningens CRM-länk" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Beställningarnas CRM-länkar" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2424,15 +2432,15 @@ msgstr "" "metod för att generera en URL för nedladdning av tillgången när den " "associerade ordern har statusen slutförd." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Nedladdningar" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Nedladdningar" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2447,64 +2455,56 @@ msgstr "" " betyg. Klassen använder databasfält för att effektivt modellera och hantera" " feedbackdata." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "Kommentarer från användare om deras erfarenhet av produkten" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Återkoppling av kommentarer" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Refererar till den specifika produkten i en order som denna feedback handlar" " om" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Relaterad order produkt" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Användartilldelat betyg för produkten" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Produktbetyg" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "du måste ge en kommentar, betyg och beställa produkt uuid för att lägga till" " feedback." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Fel under skapande av promokod: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Hem" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Kontakta oss" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Om oss" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Betalningsinformation" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Leverans" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2680,11 +2680,11 @@ msgstr "" "Alla rättigheter\n" " reserverade" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Både data och timeout krävs" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Ogiltigt timeout-värde, det måste vara mellan 0 och 216000 sekunder" @@ -2716,7 +2716,7 @@ msgstr "Du har inte behörighet att utföra den här åtgärden." msgid "NOMINATIM_URL must be configured." msgstr "Parametern NOMINATIM_URL måste konfigureras!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format 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!" @@ -2776,15 +2776,23 @@ msgstr "Hanterar globala sökfrågor." msgid "Handles the logic of buying as a business without registration." msgstr "Hanterar logiken i att köpa som ett företag utan registrering." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid är obligatoriskt" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Du kan bara ladda ner den digitala tillgången en gång" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "beställningen måste betalas innan den digitala tillgången laddas ner" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Beställningens produkt har ingen produkt" + +#: core/views.py:359 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." @@ -2792,11 +2800,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon hittades inte" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2804,7 +2812,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2815,7 +2823,11 @@ msgstr "" "admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera " "HTTP-omdirigeringen." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Returnerar aktuell version av eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2829,7 +2841,7 @@ msgstr "" "stöd för dynamiska serializerklasser baserat på den aktuella åtgärden, " "anpassningsbara behörigheter och renderingsformat." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2843,7 +2855,7 @@ msgstr "" " tillhandahåller ett standardiserat sätt att behandla förfrågningar och svar" " för AttributeGroup-data." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2859,7 +2871,7 @@ msgstr "" "returneras, t.ex. filtrering efter specifika fält eller hämtning av " "detaljerad eller förenklad information beroende på begäran." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2873,7 +2885,7 @@ msgstr "" "viewset-mekanismer och använder lämpliga serializers för olika åtgärder. " "Filtreringsfunktioner tillhandahålls genom DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2887,7 +2899,7 @@ msgstr "" "kategoridata. Vyuppsättningen tillämpar också behörigheter för att " "säkerställa att endast behöriga användare kan komma åt specifika data." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2899,7 +2911,7 @@ msgstr "" "Brand-objekt. Den använder Djangos ViewSet-ramverk för att förenkla " "implementeringen av API-slutpunkter för varumärkesobjekt." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2917,7 +2929,7 @@ msgstr "" "att hämta produktinformation, tillämpa behörigheter och få tillgång till " "relaterad feedback för en produkt." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2931,7 +2943,7 @@ msgstr "" "olika åtgärder. Syftet med denna klass är att ge strömlinjeformad åtkomst " "till Vendor-relaterade resurser genom Django REST-ramverket." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2948,7 +2960,7 @@ msgstr "" "basen `EvibesViewSet` och använder Djangos filtreringssystem för att fråga " "data." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2967,7 +2979,7 @@ msgstr "" "åtgärd som utförs och verkställer behörigheter i enlighet med detta vid " "interaktion med orderdata." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2982,11 +2994,11 @@ msgstr "" "åtgärden. Dessutom innehåller den en detaljerad åtgärd för att hantera " "feedback på OrderProduct-instanser" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Hanterar åtgärder relaterade till produktbilder i applikationen." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -2994,15 +3006,15 @@ msgstr "" "Hanterar hämtning och hantering av PromoCode-instanser genom olika API-" "åtgärder." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Representerar en vyuppsättning för hantering av kampanjer." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Hanterar åtgärder relaterade till lagerdata i systemet." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3020,7 +3032,7 @@ msgstr "" "integrerade för att säkerställa att användare endast kan hantera sina egna " "önskelistor om inte uttryckliga behörigheter beviljas." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3034,12 +3046,12 @@ msgstr "" "innehåller specialiserade beteenden för olika HTTP-metoder, serializer-" "överskrivningar och behörighetshantering baserat på förfrågningskontexten." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Fel i geokodningen: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/th_TH/LC_MESSAGES/django.mo b/core/locale/th_TH/LC_MESSAGES/django.mo index b32192f8940eeaa5cd1f1e34726d0220b76abc36..f7920d9d76c7e9030e0ff0b8e7f29184b2fbcda1 100644 GIT binary patch delta 13123 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 delta 12833 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 RK6uMJkTLoEQ?Goc{{j`Il8*oY diff --git a/core/locale/th_TH/LC_MESSAGES/django.po b/core/locale/th_TH/LC_MESSAGES/django.po index 7067d43b..3165c082 100644 --- a/core/locale/th_TH/LC_MESSAGES/django.po +++ b/core/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -108,7 +108,7 @@ msgstr "ภาพ" msgid "images" msgstr "รูปภาพ" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "สต็อก" @@ -116,11 +116,11 @@ msgstr "สต็อก" msgid "stocks" msgstr "หุ้น" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "สั่งซื้อสินค้า" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "สั่งซื้อสินค้า" @@ -128,7 +128,7 @@ msgstr "สั่งซื้อสินค้า" msgid "children" msgstr "เด็ก" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "การกำหนดค่า" @@ -180,7 +180,7 @@ msgstr "ชั่วขณะหนึ่ง" msgid "successful" msgstr "ประสบความสำเร็จ" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "แคช I/O" @@ -204,7 +204,7 @@ msgstr "รับพารามิเตอร์ที่สามารถเ msgid "send a message to the support team" msgstr "ส่งข้อความถึงทีมสนับสนุน" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "ขอ URL ที่รองรับ CORS เท่านั้น อนุญาตเฉพาะ https" @@ -441,7 +441,7 @@ msgstr "" "การสั่งซื้อจะเสร็จสมบูรณ์โดยใช้ยอดเงินคงเหลือของผู้ใช้ หากใช้ " "`force_payment` จะเริ่มการทำธุรกรรม" -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "ซื้อสินค้าโดยไม่ต้องสร้างบัญชี" @@ -727,273 +727,273 @@ msgid "add or remove feedback on an order–product relation" msgstr "" "เพิ่มหรือลบความคิดเห็นเกี่ยวกับความสัมพันธ์ระหว่างคำสั่งซื้อและผลิตภัณฑ์" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "ไม่พบคำค้นหา" -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "ค้นหา" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "ยูไอไอดี" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "ชื่อ" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "หมวดหมู่" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "หมวดหมู่ slug" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "แท็ก" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "ราคาต่ำสุด" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "ราคาสูงสุด" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "กำลังใช้งานอยู่" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "แบรนด์" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "คุณลักษณะ" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "ปริมาณ" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "ทาก" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "คือ ดิจิทัล" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "รวมหมวดหมู่ย่อย" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "รวมสินค้าสั่งทำส่วนตัว" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "ต้องมี category_uuid เพื่อใช้แฟล็ก include_subcategories" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "ค้นหา (รหัส, ชื่อผลิตภัณฑ์ หรือหมายเลขชิ้นส่วน)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "ซื้อหลังจาก (รวมแล้ว)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "ซื้อมาก่อน (รวมแล้ว)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "อีเมลผู้ใช้" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "รหัสผู้ใช้ UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "สถานะ" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "รหัสที่มนุษย์อ่านได้" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "ผู้ปกครอง" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "หมวดหมู่ทั้งหมด (มีอย่างน้อย 1 ผลิตภัณฑ์หรือไม่)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "ระดับ" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "รหัส UUID ของผลิตภัณฑ์" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "กุญแจที่ต้องค้นหาหรือติดตั้งไว้ในแคช" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "ข้อมูลที่จะเก็บไว้ในแคช" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "เวลาหมดในวินาทีเพื่อตั้งค่าข้อมูลสำหรับเก็บในแคช" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "ข้อมูลที่เก็บไว้ในแคช" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "ไม่พบคำสั่งซื้อ {order_uuid}!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "นำสินค้าทั้งหมดออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "ซื้อคำสั่ง" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "กรุณาให้ order_uuid หรือ order_hr_id - ต้องเลือกอย่างใดอย่างหนึ่งเท่านั้น!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "ประเภทไม่ถูกต้องมาจากเมธอด order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "ดำเนินการกับรายการสินค้าในลำดับ" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "ลบ/เพิ่ม" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "การกระทำต้องเป็น \"เพิ่ม\" หรือ \"ลบ\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "ดำเนินการกับรายการสินค้าในรายการสินค้าที่ต้องการ" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "กรุณาให้ค่า `wishlist_uuid`" -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "รายการที่อยากได้ {wishlist_uuid} ไม่พบ!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "เพิ่มสินค้าในคำสั่งซื้อ" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "ลบสินค้าออกจากคำสั่งซื้อ" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "ซื้อคำสั่ง" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "" "กรุณาส่งแอตทริบิวต์ในรูปแบบสตริงที่จัดรูปแบบดังนี้ attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "เพิ่มหรือลบความคิดเห็นสำหรับสินค้าที่สั่งซื้อ" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "การกระทำต้องเป็น `add` หรือ `remove` เท่านั้น!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "ไม่พบคำสั่งซื้อสินค้า {order_product_uuid}!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "สตริงที่อยู่ต้นฉบับที่ผู้ใช้ให้มา" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "ต้องอยู่ระหว่าง 1 ถึง 10" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - ทำงานได้อย่างยอดเยี่ยม" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "คุณลักษณะ" @@ -1006,11 +1006,11 @@ msgid "groups of attributes" msgstr "กลุ่มของลักษณะ" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "แบรนด์" @@ -1019,7 +1019,7 @@ msgid "category image url" msgstr "หมวดหมู่" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "เปอร์เซ็นต์มาร์กอัป" @@ -1040,7 +1040,7 @@ msgstr "แท็กสำหรับหมวดหมู่นี้" msgid "products in this category" msgstr "สินค้าในหมวดหมู่" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "ผู้ขาย" @@ -1065,7 +1065,7 @@ msgid "represents feedback from a user." msgstr "แสดงความคิดเห็นจากผู้ใช้" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "การแจ้งเตือน" @@ -1073,7 +1073,7 @@ msgstr "การแจ้งเตือน" msgid "download url for this order product if applicable" msgstr "ดาวน์โหลด url สำหรับคำสั่งซื้อสินค้านี้ หากมี" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "ข้อเสนอแนะ" @@ -1081,7 +1081,7 @@ msgstr "ข้อเสนอแนะ" msgid "a list of order products in this order" msgstr "รายการสินค้าที่สั่งซื้อในคำสั่งซื้อนี้" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "ที่อยู่สำหรับออกใบแจ้งหนี้" @@ -1109,7 +1109,7 @@ msgstr "สินค้าทั้งหมดในคำสั่งซื้ msgid "transactions for this order" msgstr "รายการธุรกรรมสำหรับคำสั่งนี้" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "คำสั่ง" @@ -1121,19 +1121,19 @@ msgstr "URL ของรูปภาพ" msgid "product's images" msgstr "รูปภาพของสินค้า" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "หมวดหมู่" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "ข้อเสนอแนะ" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "แบรนด์" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "กลุ่มคุณลักษณะ" @@ -1161,7 +1161,7 @@ msgstr "จำนวนความคิดเห็น" msgid "only available for personal orders" msgstr "สินค้าที่มีจำหน่ายเฉพาะการสั่งซื้อส่วนบุคคลเท่านั้น" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "ผลิตภัณฑ์" @@ -1173,15 +1173,15 @@ msgstr "รหัสส่งเสริมการขาย" msgid "products on sale" msgstr "สินค้าลดราคา" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "โปรโมชั่น" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "ผู้ขาย" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1189,11 +1189,11 @@ msgstr "ผู้ขาย" msgid "product" msgstr "สินค้า" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "สินค้าที่อยู่ในรายการต้องการ" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "รายการสิ่งที่ต้องการ" @@ -1201,7 +1201,7 @@ msgstr "รายการสิ่งที่ต้องการ" msgid "tagged products" msgstr "สินค้าที่ติดแท็ก" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "แท็กสินค้า" @@ -1286,7 +1286,7 @@ msgstr "ผลการค้นหาสินค้า" msgid "posts search results" msgstr "ผลการค้นหาสินค้า" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1298,23 +1298,23 @@ msgstr "" "กลุ่มแอตทริบิวต์สามารถมีกลุ่มแม่ได้ ทำให้เกิดโครงสร้างลำดับชั้น " "ซึ่งสามารถมีประโยชน์ในการจัดหมวดหมู่และจัดการแอตทริบิวต์ได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่ซับซ้อน" -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "ผู้ปกครองของกลุ่มนี้" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "กลุ่มแอตทริบิวต์ของพ่อแม่" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "ชื่อกลุ่มคุณสมบัติ" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "กลุ่มคุณลักษณะ" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1331,40 +1331,48 @@ msgstr "" "โมเดลนี้ยังรักษาข้อมูลเมตาเพิ่มเติมและข้อจำกัด " "ทำให้เหมาะสำหรับการใช้งานในระบบที่มีการโต้ตอบกับผู้ขายภายนอก" -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "เก็บรักษาข้อมูลประจำตัวและจุดสิ้นสุดที่จำเป็นสำหรับการสื่อสาร API ของผู้ขาย" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "ข้อมูลการยืนยันตัวตน" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "กำหนดมาร์กอัปสำหรับสินค้าที่ดึงมาจากผู้ขายรายนี้" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "เปอร์เซ็นต์การบวกกำไรของผู้ขาย" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "ชื่อของผู้ขายนี้" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "ชื่อผู้ขาย" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "ไฟล์การตอบสนอง" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "การตอบกลับการประมวลผลครั้งสุดท้ายของผู้ขาย" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "เส้นทางไฟล์การรวมของผู้ขาย" + +#: core/models.py:154 +msgid "integration path" +msgstr "เส้นทางการบูรณาการ" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1377,27 +1385,27 @@ msgstr "" " รองรับการดำเนินการที่ส่งออกผ่าน mixins " "และให้การปรับแต่งเมตาดาต้าสำหรับวัตถุประสงค์ในการบริหารจัดการ" -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "ตัวระบุแท็กภายในสำหรับแท็กสินค้า" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "ชื่อวัน" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "ชื่อที่เป็นมิตรกับผู้ใช้สำหรับแท็กสินค้า" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "แสดงชื่อแท็ก" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "แท็กสินค้า" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1407,15 +1415,15 @@ msgstr "" "คลาสนี้จำลองแท็กหมวดหมู่ที่สามารถใช้เพื่อเชื่อมโยงและจัดประเภทผลิตภัณฑ์ได้ " "รวมถึงแอตทริบิวต์สำหรับตัวระบุแท็กภายในและชื่อแสดงผลที่เป็นมิตรกับผู้ใช้" -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "แท็กหมวดหมู่" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "แท็กหมวดหมู่" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1435,51 +1443,51 @@ msgstr "" " ช่วยให้ผู้ใช้หรือผู้ดูแลระบบสามารถระบุชื่อ คำอธิบาย และลำดับชั้นของหมวดหมู่" " รวมถึงกำหนดคุณลักษณะต่างๆ เช่น รูปภาพ แท็ก หรือความสำคัญ" -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "อัปโหลดรูปภาพที่แสดงถึงหมวดหมู่นี้" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "ภาพหมวดหมู่" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "กำหนดเปอร์เซ็นต์มาร์กอัปสำหรับสินค้าในหมวดหมู่นี้" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "ผู้ปกครองของหมวดหมู่นี้เพื่อสร้างโครงสร้างลำดับชั้น" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "หมวดหมู่หลัก" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "ชื่อหมวดหมู่" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "กรุณาตั้งชื่อสำหรับหมวดหมู่นี้" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "เพิ่มคำอธิบายโดยละเอียดสำหรับหมวดหมู่นี้" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "หมวดหมู่คำอธิบาย" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มหมวดหมู่นี้" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "ลำดับความสำคัญ" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1491,47 +1499,47 @@ msgstr "" "รวมถึงชื่อ โลโก้ คำอธิบาย หมวดหมู่ที่เกี่ยวข้อง สลักเฉพาะ และลำดับความสำคัญ " "ช่วยให้สามารถจัดระเบียบและแสดงข้อมูลที่เกี่ยวข้องกับแบรนด์ภายในแอปพลิเคชันได้" -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "ชื่อของแบรนด์นี้" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "ชื่อแบรนด์" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "อัปโหลดโลโก้ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "แบรนด์รูปภาพขนาดเล็ก" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "อัปโหลดโลโก้ขนาดใหญ่ที่เป็นตัวแทนของแบรนด์นี้" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "แบรนด์ภาพใหญ่" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "เพิ่มคำอธิบายรายละเอียดของแบรนด์" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "คำอธิบายแบรนด์" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "หมวดหมู่เพิ่มเติมที่แบรนด์นี้เกี่ยวข้อง" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "หมวดหมู่" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1547,68 +1555,68 @@ msgstr "" "เป็นส่วนหนึ่งของระบบการจัดการสินค้าคงคลังเพื่อให้สามารถติดตามและประเมินสินค้าที่มีจากผู้จำหน่ายต่างๆ" " ได้" -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "ผู้จัดจำหน่ายที่จัดหาสินค้าคงคลังนี้" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "ผู้ขายที่เกี่ยวข้อง" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "ราคาสุดท้ายที่ลูกค้าต้องชำระหลังจากการบวกกำไร" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "ราคาขาย" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "สินค้าที่เกี่ยวข้องกับรายการสินค้าคงคลังนี้" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "ผลิตภัณฑ์ที่เกี่ยวข้อง" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "ราคาที่จ่ายให้กับผู้ขายสำหรับสินค้านี้" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "ราคาซื้อจากผู้ขาย" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "จำนวนสินค้าที่มีในสต็อก" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "จำนวนในสต็อก" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "รหัสสินค้าที่ผู้ขายกำหนดเพื่อระบุตัวผลิตภัณฑ์" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "รหัสสินค้าของผู้ขาย" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "ไฟล์ดิจิทัลที่เกี่ยวข้องกับสต็อกนี้ หากมี" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "ไฟล์ดิจิทัล" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "รายการสินค้าคงคลัง" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1628,51 +1636,51 @@ msgstr "" " " "และจัดการการแคชสำหรับคุณสมบัติที่เข้าถึงบ่อยเพื่อปรับปรุงประสิทธิภาพใช้เพื่อกำหนดและจัดการข้อมูลผลิตภัณฑ์และข้อมูลที่เกี่ยวข้องภายในแอปพลิเคชัน" -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "หมวดหมู่ที่สินค้านี้จัดอยู่ใน" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "เลือกเชื่อมโยงผลิตภัณฑ์นี้กับแบรนด์" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "แท็กที่ช่วยอธิบายหรือจัดกลุ่มผลิตภัณฑ์นี้" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "บ่งชี้ว่าสินค้านี้จัดส่งในรูปแบบดิจิทัลหรือไม่" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "สินค้าเป็นดิจิทัล" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "ระบุชื่อที่ชัดเจนสำหรับผลิตภัณฑ์" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "ชื่อสินค้า" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "เพิ่มคำอธิบายรายละเอียดของสินค้า" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "รายละเอียดสินค้า" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "หมายเลขชิ้นส่วนสำหรับสินค้านี้" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "หมายเลขชิ้นส่วน" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "หน่วยเก็บสินค้าสำหรับสินค้านี้" @@ -1740,11 +1748,11 @@ msgstr "ชื่อของแอตทริบิวต์นี้" msgid "attribute's name" msgstr "ชื่อของแอตทริบิวต์" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "สามารถกรองได้" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "กำหนดว่าแอตทริบิวต์นี้สามารถใช้สำหรับการกรองหรือไม่" @@ -1802,27 +1810,27 @@ msgstr "ข้อความแสดงแทนภาพ" msgid "upload the image file for this product" msgstr "อัปโหลดไฟล์รูปภาพสำหรับสินค้านี้" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "รูปภาพสินค้า" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "กำหนดลำดับการแสดงผลของภาพ" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "ลำดับความสำคัญในการแสดงผล" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "สินค้าที่ภาพนี้แทน" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "รูปภาพสินค้า" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1837,39 +1845,39 @@ msgstr "" "ให้รายละเอียดเกี่ยวกับโปรโมชั่น, และเชื่อมโยงกับสินค้าที่เกี่ยวข้อง. " "คลาสนี้ผสานการทำงานกับแคตตาล็อกสินค้าเพื่อกำหนดสินค้าที่ได้รับผลกระทบในแคมเปญ." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "เปอร์เซ็นต์ส่วนลดสำหรับสินค้าที่เลือก" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "กรุณาตั้งชื่อที่ไม่ซ้ำกันสำหรับการส่งเสริมการขายนี้" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "ชื่อโปรโมชั่น" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "รายละเอียดโปรโมชั่น" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "เลือกผลิตภัณฑ์ที่รวมอยู่ในโปรโมชั่นนี้" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "สินค้าที่รวมอยู่" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "โปรโมชั่น" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1881,23 +1889,23 @@ msgstr "" "ซึ่งรวมถึงการเพิ่มและลบสินค้าออกจากคอลเลกชัน " "ตลอดจนการเพิ่มและลบสินค้าหลายรายการพร้อมกัน" -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "สินค้าที่ผู้ใช้ได้ทำเครื่องหมายว่าต้องการ" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "ผู้ใช้ที่เป็นเจ้าของรายการความปรารถนา" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "เจ้าของรายการที่อยากได้" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1913,19 +1921,19 @@ msgstr "" " คลาสนี้ขยายฟังก์ชันการทำงานจากมิกซ์อินเฉพาะ " "และให้คุณสมบัติเพิ่มเติมตามความต้องการ." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "สารคดี" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "สารคดี" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "ยังไม่ได้รับการแก้ไข" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1946,59 +1954,59 @@ msgstr "" "ดิบเพื่อการประมวลผลหรือตรวจสอบเพิ่มเติมได้คลาสนี้ยังอนุญาตให้เชื่อมโยงที่อยู่กับผู้ใช้ได้" " ซึ่งช่วยให้การจัดการข้อมูลส่วนบุคคลเป็นไปอย่างสะดวก" -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "ที่อยู่สำหรับลูกค้า" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "บรรทัดที่อยู่" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "ถนน" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "เขต" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "เมือง" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "ภูมิภาค" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "รหัสไปรษณีย์" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "ประเทศ" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "จุดพิกัดภูมิศาสตร์ (ลองจิจูด, ละติจูด)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "การตอบกลับ JSON แบบเต็มจากตัวแปลงที่อยู่ทางภูมิศาสตร์สำหรับที่อยู่นี้" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "เก็บคำตอบ JSON จากบริการการแปลงที่อยู่ทางภูมิศาสตร์" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "ที่อยู่" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "ที่อยู่" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2015,71 +2023,71 @@ msgstr "" "รวมถึงฟังก์ชันการทำงานเพื่อตรวจสอบและใช้รหัสโปรโมชั่นกับคำสั่งซื้อในขณะที่ตรวจสอบให้แน่ใจว่าข้อจำกัดต่างๆ" " ได้รับการปฏิบัติตาม" -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "รหัสเฉพาะที่ผู้ใช้ใช้เพื่อแลกรับส่วนลด" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "รหัสโปรโมชั่น" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "จำนวนส่วนลดคงที่ที่ใช้หากไม่ได้ใช้เปอร์เซ็นต์" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "จำนวนส่วนลดคงที่" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "ส่วนลดเป็นเปอร์เซ็นต์ที่ใช้เมื่อไม่ได้ใช้จำนวนเงินคงที่" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "เปอร์เซ็นต์ส่วนลด" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "เวลาที่โค้ดโปรโมชั่นหมดอายุ" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "เวลาสิ้นสุดความถูกต้อง" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "เวลาที่ตราไว้ซึ่งรหัสโปรโมชั่นนี้ใช้ได้" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "เวลาเริ่มต้นความถูกต้อง" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "เวลาที่ตราประทับเมื่อใช้รหัสโปรโมชั่น, ว่างเปล่าหากยังไม่ได้ใช้" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "เวลาการใช้งาน" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "ผู้ใช้ที่ได้รับมอบหมายให้ใช้รหัสโปรโมชั่นนี้ หากมี" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "ผู้ใช้ที่ได้รับมอบหมาย" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "รหัสโปรโมชั่น" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "รหัสส่งเสริมการขาย" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2087,16 +2095,16 @@ msgstr "" "ควรกำหนดประเภทส่วนลดเพียงประเภทเดียว (จำนวนเงินหรือเปอร์เซ็นต์) เท่านั้น " "ไม่ควรกำหนดทั้งสองประเภทหรือไม่ได้กำหนดเลย" -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "รหัสโปรโมชั่นถูกใช้ไปแล้ว" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "ประเภทส่วนลดไม่ถูกต้องสำหรับรหัสโปรโมชั่น {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2114,138 +2122,138 @@ msgstr "" "และรายละเอียดการจัดส่งหรือการเรียกเก็บเงินสามารถอัปเดตได้เช่นกัน นอกจากนี้ " "ฟังก์ชันการทำงานยังรองรับการจัดการสินค้าในวงจรชีวิตของคำสั่งซื้อ" -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "ที่อยู่สำหรับเรียกเก็บเงินที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "รหัสโปรโมชั่นเสริมใช้กับคำสั่งซื้อนี้แล้ว" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "ใช้รหัสโปรโมชั่น" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "ที่อยู่สำหรับจัดส่งที่ใช้สำหรับคำสั่งซื้อนี้" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "ที่อยู่สำหรับจัดส่ง" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "สถานะปัจจุบันของคำสั่งซื้อในวงจรชีวิต" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "สถานะการสั่งซื้อ" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "โครงสร้าง JSON ของการแจ้งเตือนที่จะแสดงให้ผู้ใช้เห็น ใน UI " "ของผู้ดูแลระบบจะใช้การแสดงผลแบบตาราง" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "การแสดงผล JSON ของคุณลักษณะคำสั่งซื้อสำหรับคำสั่งซื้อนี้" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "ผู้ใช้ที่ทำการสั่งซื้อ" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "ผู้ใช้" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "เวลาที่คำสั่งซื้อได้รับการยืนยัน" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "ซื้อเวลา" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "ตัวระบุที่มนุษย์อ่านได้สำหรับคำสั่ง" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "รหัสที่สามารถอ่านได้โดยมนุษย์" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "คำสั่ง" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" "ผู้ใช้ต้องมีคำสั่งซื้อที่รอดำเนินการเพียงหนึ่งรายการเท่านั้นในแต่ละครั้ง!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "คุณไม่สามารถเพิ่มสินค้าในคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่รอดำเนินการได้" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "คุณไม่สามารถเพิ่มสินค้าที่ไม่ใช้งานในคำสั่งซื้อได้" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "คุณไม่สามารถเพิ่มสินค้าได้มากกว่าที่มีในสต็อก" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "คุณไม่สามารถลบสินค้าออกจากคำสั่งซื้อที่ไม่ใช่คำสั่งซื้อที่อยู่ในสถานะรอดำเนินการได้" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} ไม่มีอยู่จริงกับคำค้นหา <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "รหัสโปรโมชั่นไม่มีอยู่" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "คุณสามารถซื้อได้เฉพาะสินค้าทางกายภาพที่มีที่อยู่สำหรับจัดส่งระบุไว้เท่านั้น!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "ไม่มีที่อยู่" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "ขณะนี้คุณไม่สามารถซื้อได้ กรุณาลองใหม่อีกครั้งในอีกไม่กี่นาที" -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "ค่าแรงบังคับไม่ถูกต้อง" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อที่ว่างเปล่าได้!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "คุณไม่สามารถซื้อคำสั่งซื้อได้หากไม่มีผู้ใช้!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "ผู้ใช้ที่ไม่มียอดคงเหลือไม่สามารถซื้อด้วยยอดคงเหลือได้!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "เงินไม่เพียงพอในการทำรายการให้เสร็จสมบูรณ์" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2253,14 +2261,14 @@ msgstr "" "คุณไม่สามารถซื้อได้หากไม่มีการลงทะเบียน กรุณาให้ข้อมูลต่อไปนี้: ชื่อลูกค้า, " "อีเมลลูกค้า, หมายเลขโทรศัพท์ลูกค้า" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "วิธีการชำระเงินไม่ถูกต้อง: {payment_method} จาก {available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2282,108 +2290,108 @@ msgstr "" "โมเดลนี้ผสานรวมกับโมเดล Order และ Product " "และเก็บการอ้างอิงถึงโมเดลเหล่านี้ไว้" -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "ราคาที่ลูกค้าชำระสำหรับสินค้านี้ ณ เวลาที่ซื้อ" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "ราคาซื้อ ณ เวลาที่สั่งซื้อ" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "ความคิดเห็นภายในสำหรับผู้ดูแลระบบเกี่ยวกับสินค้าที่สั่งซื้อ" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "ความคิดเห็นภายใน" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "การแจ้งเตือนผู้ใช้" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "การแสดงผล JSON ของคุณลักษณะของรายการนี้" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "จัดเรียงคุณลักษณะของสินค้า" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "การอ้างอิงถึงคำสั่งซื้อหลักที่มีสินค้านี้อยู่" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "ลำดับของผู้ปกครอง" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "สินค้าเฉพาะที่เกี่ยวข้องกับรายการคำสั่งซื้อนี้" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "ปริมาณของสินค้าชนิดนี้ในคำสั่งซื้อ" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "จำนวนสินค้า" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "สถานะปัจจุบันของสินค้านี้ในคำสั่งซื้อ" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "สถานะสายผลิตภัณฑ์" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct ต้องมีการสั่งซื้อที่เกี่ยวข้อง!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "ระบุการกระทำที่ไม่ถูกต้องสำหรับข้อเสนอแนะ: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "คุณไม่สามารถให้ข้อเสนอแนะเกี่ยวกับคำสั่งซื้อที่ไม่ได้รับ" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "ชื่อ" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "URL ของการผสานรวม" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "ข้อมูลประจำตัวสำหรับการยืนยันตัวตน" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "คุณสามารถมีผู้ให้บริการ CRM เริ่มต้นได้เพียงรายเดียวเท่านั้น" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "ระบบบริหารความสัมพันธ์ลูกค้า" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "ลิงก์ CRM ของคำสั่ง" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "ลิงก์ CRM ของคำสั่งซื้อ" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2399,15 +2407,15 @@ msgstr "" "และว่าสินทรัพย์นั้นสามารถมองเห็นได้สาธารณะหรือไม่ รวมถึงวิธีการสร้าง URL " "สำหรับการดาวน์โหลดสินทรัพย์เมื่อคำสั่งซื้อที่เกี่ยวข้องอยู่ในสถานะเสร็จสมบูรณ์" -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "ดาวน์โหลด" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "ดาวน์โหลด" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2421,61 +2429,53 @@ msgstr "" "การอ้างอิงถึงผลิตภัณฑ์ที่เกี่ยวข้องในคำสั่งซื้อ และคะแนนที่ผู้ใช้กำหนด " "คลาสนี้ใช้ฟิลด์ในฐานข้อมูลเพื่อสร้างแบบจำลองและจัดการข้อมูลข้อเสนอแนะอย่างมีประสิทธิภาพ" -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "ความคิดเห็นที่ผู้ใช้ให้ไว้เกี่ยวกับประสบการณ์ของพวกเขาต่อผลิตภัณฑ์" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "ความคิดเห็นจากผู้ตอบแบบสอบถาม" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "อ้างอิงถึงผลิตภัณฑ์เฉพาะในคำสั่งซื้อที่ความคิดเห็นนี้เกี่ยวข้อง" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "สินค้าที่เกี่ยวข้อง" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "คะแนนที่ผู้ใช้กำหนดให้กับผลิตภัณฑ์" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "การให้คะแนนสินค้า" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "คุณต้องแสดงความคิดเห็น, ให้คะแนน, และระบุ uuid ของสินค้าเพื่อเพิ่มคำแนะนำ" -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "เกิดข้อผิดพลาดระหว่างการสร้างรหัสโปรโมชั่น: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "หน้าแรก" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "ติดต่อเรา" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "เกี่ยวกับเรา" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "ข้อมูลการชำระเงิน" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "การจัดส่ง" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2643,11 +2643,11 @@ msgid "" " reserved" msgstr "สงวนลิขสิทธิ์" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "จำเป็นต้องมีทั้งข้อมูลและเวลาหมดอายุ" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "ค่าหมดเวลาไม่ถูกต้อง ต้องอยู่ระหว่าง 0 ถึง 216000 วินาที" @@ -2679,7 +2679,7 @@ msgstr "คุณไม่มีสิทธิ์ดำเนินการน msgid "NOMINATIM_URL must be configured." msgstr "ต้องกำหนดค่าพารามิเตอร์ NOMINATIM_URL!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "ขนาดของภาพไม่ควรเกิน w{max_width} x h{max_height} พิกเซล!" @@ -2739,15 +2739,23 @@ msgstr "จัดการคำค้นหาทั่วโลก" msgid "Handles the logic of buying as a business without registration." msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน" -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid เป็นข้อมูลที่จำเป็น" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "สินค้าตามคำสั่งซื้อไม่มีสินค้า" + +#: core/views.py:359 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." @@ -2756,11 +2764,11 @@ msgstr "" "ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" " หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "ไม่พบไอคอนเว็บไซต์" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2769,7 +2777,7 @@ msgstr "" "favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " "จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2779,7 +2787,11 @@ msgstr "" "ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " "โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "ส่งคืนเวอร์ชันปัจจุบันของ eVibes" + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2793,7 +2805,7 @@ msgstr "" "Evibes รวมถึงการรองรับคลาสตัวแปลงแบบไดนามิกตามการกระทำปัจจุบัน " "การอนุญาตที่ปรับแต่งได้ และรูปแบบการแสดงผล" -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2807,7 +2819,7 @@ msgstr "" "ของแอปพลิเคชันและให้วิธีการมาตรฐานในการประมวลผลคำขอและการตอบสนองสำหรับข้อมูล" " AttributeGroup" -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2823,7 +2835,7 @@ msgstr "" "การกรองตามฟิลด์เฉพาะ หรือการดึงข้อมูลแบบละเอียดหรือแบบย่อ " "ขึ้นอยู่กับความต้องการของคำขอ" -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2837,7 +2849,7 @@ msgstr "" "REST Framework และใช้ตัวแปลงข้อมูลที่เหมาะสมสำหรับแต่ละการกระทำ " "ความสามารถในการกรองข้อมูลมีให้ผ่าน DjangoFilterBackend" -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2851,7 +2863,7 @@ msgstr "" " " "ชุดมุมมองนี้ยังบังคับใช้สิทธิ์การเข้าถึงเพื่อให้แน่ใจว่าเฉพาะผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงข้อมูลเฉพาะได้" -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2864,7 +2876,7 @@ msgstr "" "ของ Django เพื่อทำให้การพัฒนาระบบจุดสิ้นสุด API " "สำหรับออบเจ็กต์แบรนด์เป็นเรื่องง่ายขึ้น" -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2881,7 +2893,7 @@ msgstr "" " API แบบ RESTful รวมถึงวิธีการสำหรับการดึงรายละเอียดผลิตภัณฑ์ การใช้สิทธิ์ " "และการเข้าถึงข้อเสนอแนะที่เกี่ยวข้องของผลิตภัณฑ์" -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2895,7 +2907,7 @@ msgstr "" "วัตถุประสงค์ของคลาสนี้คือการให้การเข้าถึงทรัพยากรที่เกี่ยวข้องกับ Vendor " "อย่างมีประสิทธิภาพผ่านกรอบงาน Django REST" -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2911,7 +2923,7 @@ msgstr "" " และจัดการวัตถุข้อเสนอแนะที่เข้าถึงได้บนพื้นฐานของสิทธิ์ มันขยายคลาสพื้นฐาน " "`EvibesViewSet` และใช้ระบบกรองของ Django สำหรับการสืบค้นข้อมูล" -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2929,7 +2941,7 @@ msgstr "" "และการดึงคำสั่งซื้อที่รอดำเนินการของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน ViewSet " "ใช้ตัวแปลงข้อมูลหลายแบบตามการกระทำที่เฉพาะเจาะจงและบังคับใช้สิทธิ์การเข้าถึงอย่างเหมาะสมขณะโต้ตอบกับข้อมูลคำสั่งซื้อ" -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2944,26 +2956,26 @@ msgstr "" "นอกจากนี้ยังมีรายละเอียดการดำเนินการสำหรับการจัดการข้อเสนอแนะเกี่ยวกับอินสแตนซ์ของ" " OrderProduct" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับภาพผลิตภัณฑ์ในแอปพลิเคชัน" -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "" "จัดการการดึงและการจัดการของตัวอย่าง PromoCode ผ่านการกระทำของ API ต่าง ๆ" -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "แสดงมุมมองที่ตั้งค่าไว้สำหรับการจัดการโปรโมชั่น" -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "จัดการการดำเนินงานที่เกี่ยวข้องกับข้อมูลสต็อกในระบบ" -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2981,7 +2993,7 @@ msgstr "" "มีการตรวจสอบสิทธิ์เพื่อรับรองว่าผู้ใช้สามารถจัดการรายการที่ต้องการของตนเองเท่านั้น" " เว้นแต่จะได้รับสิทธิ์อนุญาตอย่างชัดเจน" -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2995,12 +3007,12 @@ msgstr "" "รวมถึงพฤติกรรมเฉพาะสำหรับวิธีการ HTTP ที่แตกต่างกัน การแทนที่ตัวแปลงข้อมูล " "และการจัดการสิทธิ์ตามบริบทของคำขอ" -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "ข้อผิดพลาดในการแปลงพิกัดภูมิศาสตร์: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/tr_TR/LC_MESSAGES/django.mo b/core/locale/tr_TR/LC_MESSAGES/django.mo index 4cff1ece36c43c3befc0654331871ea8140028a3..c803d1af26af1b3022864067f9c5a496d6b9983b 100644 GIT binary patch delta 13089 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 b@Sm3<)O+}!nVvOjY?_|DBc_9=YvBI?czVMc delta 12815 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Resim" msgid "images" msgstr "Görüntüler" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Stok" @@ -118,11 +118,11 @@ msgstr "Stok" msgid "stocks" msgstr "Stoklar" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Ürün Siparişi" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Sipariş Ürünleri" @@ -130,7 +130,7 @@ msgstr "Sipariş Ürünleri" msgid "children" msgstr "Çocuklar" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Konfigürasyon" @@ -182,7 +182,7 @@ msgstr "Momental" msgid "successful" msgstr "Başarılı" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Önbellek I/O" @@ -206,7 +206,7 @@ msgstr "Uygulamanın açığa çıkarılabilir parametrelerini alın" msgid "send a message to the support team" msgstr "Destek ekibine bir mesaj gönderin" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "CORS'lu bir URL isteyin. Yalnızca https'ye izin verilir." @@ -450,7 +450,7 @@ msgstr "" " işlemi kullanıcının bakiyesi kullanılarak tamamlanır; Eğer `force_payment` " "kullanılırsa, bir işlem başlatılır." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "hesap oluşturmadan sipariş satın alma" @@ -747,234 +747,234 @@ msgstr "sipariş-ürün ilişkisini silme" msgid "add or remove feedback on an order–product relation" msgstr "sipariş-ürün ilişkisine geri bildirim ekleme veya kaldırma" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Arama terimi belirtilmemiştir." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Arama" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "İsim" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Kategoriler" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Kategoriler Sümüklüböcekler" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Etiketler" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Min Fiyat" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Maksimum Fiyat" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Aktif mi" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Marka" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Nitelikler" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Miktar" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Sümüklüböcek" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Dijital mi" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Alt kategorileri dahil edin" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Kişisel sipariş edilen ürünleri dahil edin" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "SKU" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "" "include_subcategories bayrağını kullanmak için bir category_uuid olmalıdır" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Arama (ID, ürün adı veya parça numarası)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Sonra satın alındı (dahil)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Daha önce satın alındı (dahil)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Kullanıcı e-postası" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "Kullanıcı UUID'si" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Durum" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "İnsan Tarafından Okunabilir Kimlik" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Ebeveyn" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Tüm kategori (en az 1 ürün var veya yok)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Seviye" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Ürün UUID'si" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Önbellekte aranacak veya önbelleğe yerleştirilecek anahtar" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Önbellekte depolanacak veriler" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Verileri önbelleğe almak için saniye cinsinden zaman aşımı" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Önbelleğe alınmış veriler" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "İstenen URL'den kameleştirilmiş JSON verileri" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Siparişe ürün ekleme" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Sipariş {order_uuid} bulunamadı!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Siparişten tüm ürünleri kaldırın" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Bir sipariş satın alın" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Lütfen order_uuid veya order_hr_id bilgilerinden birini sağlayın - birbirini" " dışlayan bilgiler!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() metodundan yanlış tip geldi: {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Siparişteki ürünlerin listesi üzerinde bir eylem gerçekleştirin" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Kaldır/Ekle" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Eylem ya \"ekle\" ya da \"kaldır\" olmalıdır!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "İstek listesindeki bir ürün listesi üzerinde eylem gerçekleştirme" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Lütfen `wishlist_uuid` değerini girin." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "İstek listesi {wishlist_uuid} bulunamadı!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Siparişe ürün ekleme" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Siparişten bir ürünü kaldırma" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Bir sipariş satın alın" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -982,41 +982,41 @@ msgstr "" "Lütfen öznitelikleri attr1=value1,attr2=value2 şeklinde biçimlendirilmiş " "dize olarak gönderin" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Orderproduct için bir geri bildirim ekleme veya silme" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Eylem ya `ekle` ya da `kaldır` olmalıdır!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Orderproduct {order_product_uuid} bulunamadı!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Kullanıcı tarafından sağlanan orijinal adres dizesi" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Limit 1 ile 10 arasında olmalıdır" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - bir cazibe gibi çalışır" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Nitelikler" @@ -1029,11 +1029,11 @@ msgid "groups of attributes" msgstr "Nitelik grupları" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Kategoriler" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Markalar" @@ -1042,7 +1042,7 @@ msgid "category image url" msgstr "Kategoriler" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "İşaretleme Yüzdesi" @@ -1064,7 +1064,7 @@ msgstr "Bu kategori için etiketler" msgid "products in this category" msgstr "Bu kategorideki ürünler" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Satıcılar" @@ -1089,7 +1089,7 @@ msgid "represents feedback from a user." msgstr "Bir kullanıcıdan gelen geri bildirimi temsil eder." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Bildirimler" @@ -1097,7 +1097,7 @@ msgstr "Bildirimler" msgid "download url for this order product if applicable" msgstr "Varsa, bu sipariş ürünü için URL'yi indirin" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Geri bildirim" @@ -1105,7 +1105,7 @@ msgstr "Geri bildirim" msgid "a list of order products in this order" msgstr "Bu siparişteki sipariş ürünlerinin bir listesi" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Fatura adresi" @@ -1133,7 +1133,7 @@ msgstr "Siparişteki tüm ürünler dijital mi" msgid "transactions for this order" msgstr "Bu sipariş için işlemler" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Siparişler" @@ -1145,19 +1145,19 @@ msgstr "Resim URL'si" msgid "product's images" msgstr "Ürün görselleri" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Kategori" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Geri Bildirimler" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Marka" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Öznitelik grupları" @@ -1185,7 +1185,7 @@ msgstr "Geri bildirim sayısı" msgid "only available for personal orders" msgstr "Ürünler sadece kişisel siparişler için mevcuttur" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Ürünler" @@ -1197,15 +1197,15 @@ msgstr "Promosyon Kodları" msgid "products on sale" msgstr "Satıştaki ürünler" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Promosyonlar" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Satıcı" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1213,11 +1213,11 @@ msgstr "Satıcı" msgid "product" msgstr "Ürün" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "İstek listesindeki ürünler" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Dilek Listeleri" @@ -1225,7 +1225,7 @@ msgstr "Dilek Listeleri" msgid "tagged products" msgstr "Etiketlenmiş ürünler" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Ürün etiketleri" @@ -1310,7 +1310,7 @@ msgstr "Ürünler arama sonuçları" msgid "posts search results" msgstr "Ürünler arama sonuçları" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1323,23 +1323,23 @@ msgstr "" " sistemde öznitelikleri daha etkili bir şekilde kategorize etmek ve yönetmek" " için yararlı olabilir." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Bu grubun ebeveyni" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Üst öznitelik grubu" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Öznitelik grubunun adı" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Öznitelik grubu" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1357,41 +1357,49 @@ msgstr "" "meta verileri ve kısıtlamaları da muhafaza ederek üçüncü taraf satıcılarla " "etkileşime giren sistemlerde kullanıma uygun hale getirir." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Satıcının API iletişimi için gerekli kimlik bilgilerini ve uç noktaları " "depolar" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Kimlik doğrulama bilgisi" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "Bu satıcıdan alınan ürünler için işaretlemeyi tanımlayın" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Satıcı kar payı yüzdesi" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Bu satıcının adı" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Satıcı adı" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "yanıt dosyası" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "satıcının son işlem yanıtı" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Satıcının entegrasyon dosya yolu" + +#: core/models.py:154 +msgid "integration path" +msgstr "Entegrasyon yolu" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1406,27 +1414,27 @@ msgstr "" "aracılığıyla dışa aktarılan işlemleri destekler ve yönetimsel amaçlar için " "meta veri özelleştirmesi sağlar." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Ürün etiketi için dahili etiket tanımlayıcısı" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Etiket adı" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Ürün etiketi için kullanıcı dostu ad" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Etiket görünen adı" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Ürün etiketi" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1437,15 +1445,15 @@ msgstr "" "kategori etiketini modeller. Dahili bir etiket tanımlayıcısı ve kullanıcı " "dostu bir ekran adı için öznitelikler içerir." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "kategori etiketi" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "kategori etiketleri" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1467,51 +1475,51 @@ msgstr "" "açıklamasını ve hiyerarşisini belirlemesinin yanı sıra resimler, etiketler " "veya öncelik gibi öznitelikler atamasına olanak tanır." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Bu kategoriyi temsil eden bir resim yükleyin" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Kategori görüntüsü" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "Bu kategorideki ürünler için bir fiyatlandırma yüzdesi tanımlayın" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Hiyerarşik bir yapı oluşturmak için bu kategorinin üst öğesi" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Ana kategori" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Kategori adı" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Bu kategori için bir ad girin" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Bu kategori için ayrıntılı bir açıklama ekleyin" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Kategori açıklaması" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "bu kategoriyi tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Öncelik" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1525,47 +1533,47 @@ msgstr "" "Uygulama içinde markayla ilgili verilerin düzenlenmesini ve temsil " "edilmesini sağlar." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Bu markanın adı" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Marka adı" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Bu markayı temsil eden bir logo yükleyin" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Marka küçük imajı" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Bu markayı temsil eden büyük bir logo yükleyin" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Marka büyük imaj" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Markanın ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Marka açıklaması" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Bu markanın ilişkili olduğu isteğe bağlı kategoriler" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Kategoriler" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1581,68 +1589,68 @@ msgstr "" " ürünlerin izlenmesine ve değerlendirilmesine olanak sağlamak için envanter " "yönetim sisteminin bir parçasıdır." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Bu ürün stokunu tedarik eden satıcı" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "İlişkili satıcı" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Fiyat artışlarından sonra müşteriye verilen nihai fiyat" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Satış fiyatı" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Bu stok girişi ile ilişkili ürün" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "İlişkili ürün" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Bu ürün için satıcıya ödenen fiyat" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Satıcı satın alma fiyatı" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Stoktaki mevcut ürün miktarı" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Stoktaki miktar" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Ürünü tanımlamak için satıcı tarafından atanan SKU" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Satıcının SKU'su" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Varsa bu stokla ilişkili dijital dosya" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Dijital dosya" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Stok girişleri" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1663,51 +1671,51 @@ msgstr "" "yönetir. Bir uygulama içinde ürün verilerini ve ilişkili bilgileri " "tanımlamak ve işlemek için kullanılır." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Bu ürünün ait olduğu kategori" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "İsteğe bağlı olarak bu ürünü bir marka ile ilişkilendirin" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Bu ürünü tanımlamaya veya gruplandırmaya yardımcı olan etiketler" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "Bu ürünün dijital olarak teslim edilip edilmediğini belirtir" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Ürün dijital mi" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Ürün için net bir tanımlayıcı isim sağlayın" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Ürün adı" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Ürünün ayrıntılı bir açıklamasını ekleyin" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Ürün Açıklaması" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Bu ürün için parça numarası" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Parça numarası" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Bu ürün için Stok Tutma Birimi" @@ -1775,11 +1783,11 @@ msgstr "Bu niteliğin adı" msgid "attribute's name" msgstr "Özniteliğin adı" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "filtrelenebilir" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "" "Bu kategoriyi filtrelemek için hangi nitelikler ve değerler kullanılabilir." @@ -1837,27 +1845,27 @@ msgstr "Resim alt metni" msgid "upload the image file for this product" msgstr "Bu ürün için resim dosyasını yükleyin" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Ürün görseli" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Görüntülerin görüntülenme sırasını belirler" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Ekran önceliği" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Bu görselin temsil ettiği ürün" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Ürün görselleri" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1873,39 +1881,39 @@ msgstr "" "öznitelikler içerir. Kampanyadaki etkilenen ürünleri belirlemek için ürün " "kataloğu ile entegre olur." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Seçilen ürünler için yüzde indirim" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "İndirim yüzdesi" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Bu promosyon için benzersiz bir ad girin" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Promosyon adı" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Promosyon açıklaması" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Bu promosyona hangi ürünlerin dahil olduğunu seçin" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Dahil olan ürünler" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Promosyon" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1917,23 +1925,23 @@ msgstr "" "sağlar, ürün ekleme ve kaldırma gibi işlemlerin yanı sıra aynı anda birden " "fazla ürün ekleme ve kaldırma işlemlerini destekler." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Kullanıcının aranıyor olarak işaretlediği ürünler" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Bu istek listesine sahip olan kullanıcı" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Dilek Listesi Sahibi" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "İstek Listesi" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1948,19 +1956,19 @@ msgstr "" "dosya türünü ve depolama yolunu işlemek için yöntemler ve özellikler içerir." " Belirli mixin'lerin işlevselliğini genişletir ve ek özel özellikler sağlar." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Belgesel" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Belgeseller" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Çözümlenmemiş" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1981,59 +1989,59 @@ msgstr "" "Sınıf ayrıca bir adresin bir kullanıcıyla ilişkilendirilmesine olanak " "tanıyarak kişiselleştirilmiş veri işlemeyi kolaylaştırır." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Müşteri için adres satırı" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Adres hattı" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Sokak" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Bölge" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Şehir" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Bölge" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Posta kodu" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Ülke" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Coğrafi Konum Noktası(Boylam, Enlem)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Bu adres için geocoder'dan alınan tam JSON yanıtı" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Coğrafi kodlama hizmetinden depolanan JSON yanıtı" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Adres" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Adresler" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2050,74 +2058,74 @@ msgstr "" "karşılandığından emin olurken promosyon kodunu doğrulamak ve siparişe " "uygulamak için işlevsellik içerir." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "" "Bir kullanıcı tarafından indirimden yararlanmak için kullanılan benzersiz " "kod" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Promosyon kodu tanımlayıcı" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Yüzde kullanılmazsa uygulanan sabit indirim tutarı" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Sabit iskonto tutarı" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "Sabit tutar kullanılmazsa uygulanan yüzde indirimi" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Yüzde indirim" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Promosyon kodunun sona erdiği zaman damgası" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Geçerlilik süresi sonu" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Bu promosyon kodunun geçerli olduğu zaman damgası" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Geçerlilik süresini başlat" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Promosyon kodunun kullanıldığı zaman damgası, henüz kullanılmadıysa boş" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Kullanım zaman damgası" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Varsa bu promosyon koduna atanan kullanıcı" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Atanmış kullanıcı" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Promosyon kodu" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Promosyon kodları" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2125,16 +2133,16 @@ msgstr "" "Sadece bir indirim türü (tutar veya yüzde) tanımlanmalı, ikisi birden veya " "hiçbiri tanımlanmamalıdır." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Promosyon kodu zaten kullanılmış" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Promosyon kodu {self.uuid} için geçersiz indirim türü!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2151,136 +2159,136 @@ msgstr "" "güncellenebilir. Aynı şekilde işlevsellik, sipariş yaşam döngüsündeki " "ürünlerin yönetilmesini de destekler." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Bu sipariş için kullanılan fatura adresi" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Bu siparişe isteğe bağlı promosyon kodu uygulanır" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Uygulanan promosyon kodu" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Bu sipariş için kullanılan gönderim adresi" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Nakliye adresi" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Siparişin yaşam döngüsündeki mevcut durumu" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Sipariş durumu" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Kullanıcılara gösterilecek bildirimlerin JSON yapısı, yönetici kullanıcı " "arayüzünde tablo görünümü kullanılır" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Bu sipariş için sipariş özniteliklerinin JSON gösterimi" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Siparişi veren kullanıcı" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Kullanıcı" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Siparişin sonlandırıldığı zaman damgası" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Zaman satın alın" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Sipariş için insan tarafından okunabilir bir tanımlayıcı" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "insan tarafından okunabilir kimlik" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Sipariş" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "Bir kullanıcı aynı anda yalnızca bir bekleyen emre sahip olmalıdır!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "Beklemede olmayan bir siparişe ürün ekleyemezsiniz" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Aktif olmayan ürünleri siparişe ekleyemezsiniz" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Stokta mevcut olandan daha fazla ürün ekleyemezsiniz" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "Beklemede olmayan bir siparişten ürün kaldıramazsınız" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} <{query}> sorgusu ile mevcut değil!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Promosyon kodu mevcut değil" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Fiziksel ürünleri yalnızca gönderim adresi belirtilerek satın alabilirsiniz!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Adres mevcut değil" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "Şu anda satın alamazsınız, lütfen birkaç dakika içinde tekrar deneyin." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Geçersiz kuvvet değeri" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Boş bir sipariş satın alamazsınız!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Kullanıcı olmadan sipariş alamazsınız!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Bakiyesi olmayan bir kullanıcı bakiye ile satın alamaz!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Siparişi tamamlamak için yeterli fon yok" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2288,14 +2296,14 @@ msgstr "" "kayıt olmadan satın alamazsınız, lütfen aşağıdaki bilgileri sağlayın: " "müşteri adı, müşteri e-postası, müşteri telefon numarası" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "" "Geçersiz ödeme yöntemi: {available_payment_methods}'den {payment_method}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2317,108 +2325,108 @@ msgstr "" "destekleyen yöntemler ve özellikler sağlar. Model, Sipariş ve Ürün " "modelleriyle entegre olur ve bunlara referans depolar." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Satın alma sırasında müşteri tarafından bu ürün için ödenen fiyat" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Sipariş anındaki satın alma fiyatı" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Sipariş edilen bu ürün hakkında yöneticiler için dahili yorumlar" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Dahili yorumlar" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Kullanıcı bildirimleri" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Bu öğenin özniteliklerinin JSON gösterimi" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Sıralı ürün özellikleri" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Bu ürünü içeren ana siparişe referans" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Ana sipariş" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Bu sipariş satırıyla ilişkili belirli ürün" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Siparişteki bu belirli ürünün miktarı" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Ürün miktarı" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Bu ürünün siparişteki mevcut durumu" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Ürün hattı durumu" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Orderproduct ilişkili bir siparişe sahip olmalıdır!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Geri bildirim için yanlış eylem belirtildi: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "alınmamış bir siparişe geri bildirim yapamazsınız" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "İsim" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "Entegrasyonun URL'si" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Kimlik doğrulama bilgileri" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Yalnızca bir varsayılan CRM sağlayıcınız olabilir" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "CRM" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "CRM'ler" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Siparişin CRM bağlantısı" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Siparişlerin CRM bağlantıları" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2434,15 +2442,15 @@ msgstr "" " sipariş tamamlandı durumundayken varlığın indirilmesi için bir URL " "oluşturmaya yönelik bir yöntem içerir." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "İndir" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "İndirmeler" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2457,65 +2465,57 @@ msgstr "" "atanan bir derecelendirme içerir. Sınıf, geri bildirim verilerini etkili bir" " şekilde modellemek ve yönetmek için veritabanı alanlarını kullanır." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" "Ürünle ilgili deneyimleri hakkında kullanıcı tarafından sağlanan yorumlar" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Geri bildirim yorumları" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Bu geri bildirimin ilgili olduğu siparişteki belirli bir ürüne atıfta " "bulunur" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "İlgili sipariş ürünü" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Ürün için kullanıcı tarafından atanan derecelendirme" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Ürün değerlendirmesi" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "geri̇ bi̇ldi̇ri̇m eklemek i̇çi̇n bi̇r yorum, puan ve si̇pari̇ş ürün uuid'si̇" " sağlamalisiniz." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Promosyon kodu oluşturma sırasında hata: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Ev" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Bize Ulaşın" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Hakkımızda" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Ödeme Bilgileri" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Teslimat" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2691,11 +2691,11 @@ msgstr "" "Tüm hakları\n" " ayrılmış" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Hem veri hem de zaman aşımı gereklidir" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "Geçersiz zaman aşımı değeri, 0 ile 216000 saniye arasında olmalıdır" @@ -2727,7 +2727,7 @@ msgstr "Bu eylemi gerçekleştirmek için izniniz yok." msgid "NOMINATIM_URL must be configured." msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format 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!" @@ -2789,15 +2789,23 @@ msgstr "Küresel arama sorgularını işler." 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." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid gereklidir" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "dijital varlık indirilmeden önce siparişin ödenmesi gerekir" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Sipariş ürününün bir ürünü yok" + +#: core/views.py:359 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." @@ -2805,11 +2813,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "favicon bulunamadı" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2817,7 +2825,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2828,7 +2836,11 @@ msgstr "" "yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` " "fonksiyonunu kullanır." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "eVibes'in geçerli sürümünü döndürür." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2842,7 +2854,7 @@ msgstr "" "eyleme dayalı dinamik serileştirici sınıfları, özelleştirilebilir izinler ve" " işleme biçimleri için destek içerir." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2856,7 +2868,7 @@ msgstr "" "parçasıdır ve AttributeGroup verilerine yönelik istekleri ve yanıtları " "işlemek için standartlaştırılmış bir yol sağlar." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2872,7 +2884,7 @@ msgstr "" "bağlı olarak ayrıntılı ve basitleştirilmiş bilgilerin alınması gibi " "döndürülen veriler üzerinde dinamik kontrol sağlar." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2887,7 +2899,7 @@ msgstr "" "serileştiriciler kullanır. Filtreleme yetenekleri DjangoFilterBackend " "aracılığıyla sağlanır." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2902,7 +2914,7 @@ msgstr "" "kullanıcıların belirli verilere erişebilmesini sağlamak için izinleri de " "zorlar." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2914,7 +2926,7 @@ msgstr "" "sağlar. Brand nesneleri için API uç noktalarının uygulanmasını " "basitleştirmek için Django'nun ViewSet çerçevesini kullanır." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2932,7 +2944,7 @@ msgstr "" "uygulamak ve bir ürünün ilgili geri bildirimlerine erişmek için yöntemler " "içerir." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2947,7 +2959,7 @@ msgstr "" "tanımlar. Bu sınıfın amacı, Django REST çerçevesi aracılığıyla Vendor ile " "ilgili kaynaklara kolaylaştırılmış erişim sağlamaktır." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2964,7 +2976,7 @@ msgstr "" "genişletir ve verileri sorgulamak için Django'nun filtreleme sistemini " "kullanır." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2983,7 +2995,7 @@ msgstr "" "birden fazla serileştirici kullanır ve sipariş verileriyle etkileşime " "girerken izinleri buna göre zorlar." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2997,11 +3009,11 @@ msgstr "" " serileştirici değiştirme içerir. Ayrıca, OrderProduct örnekleriyle ilgili " "geri bildirimleri işlemek için ayrıntılı bir eylem sağlar" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Uygulamadaki Ürün görselleri ile ilgili işlemleri yönetir." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3009,15 +3021,15 @@ msgstr "" "Çeşitli API eylemleri aracılığıyla PromoCode örneklerinin alınmasını ve " "işlenmesini yönetir." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Promosyonları yönetmek için bir görünüm kümesini temsil eder." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Sistemdeki Stok verileri ile ilgili işlemleri yürütür." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3035,7 +3047,7 @@ msgstr "" "verilmediği sürece kullanıcıların yalnızca kendi istek listelerini " "yönetebilmelerini sağlamak için entegre edilmiştir." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3049,12 +3061,12 @@ msgstr "" "serileştirici geçersiz kılmaları ve istek bağlamına dayalı izin işleme için " "özel davranışlar içerir." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Coğrafi kodlama hatası: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/vi_VN/LC_MESSAGES/django.mo b/core/locale/vi_VN/LC_MESSAGES/django.mo index 07aed3febd39b1b8efdb6199044315bed5a5d02c..8c016b523f6a4bf2e90e16f09f982ab1cce390e4 100644 GIT binary patch delta 13124 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 z z-X;>s2Vq+xk8=K|FB+pCZ7Ob& z1hLZtg2(j#ws6|?APFUS1o(ct(TqCHbZsrE%fo+&-zZlicsQCcLYv-{dXNPWji?Lc zvu%h4u3hgRQ=FtVmEBzB2^`G_z9!gr-))Nisv@eLw>d!9m* zNAhP~gZ|emR-su%ehcg2d-wtBg%e{^S5&p+7rErQ1+>>^}muGcn_Jf zl(%36aftZ;wxv|^S~r)7{}4~Oopw`hKuji|hWXn!6y}hR#37jD8WvGrL)p8J!asx| zIugx@YeZS9j-a-d#J9eZ{ihW5BZw?w1u>P-7RwD>ryN4L4N-{l7r24Y_L;?0p}q|J zwzgl4czsgwBaOciXDDlX!Q%UsiHgPfK$2_Io9zhk7SWvgbbO4^R+M}{`^}`BOROYL z5x)@scMB`P`2Wt%v4mce+G03BZE|gT1#4?WlyP;JovQDnf83_mY6sWWl4F!4v~450 z6CcsGhuB1UFE-S^TK|6#dUZ~sVlHus@<=thEzupQ4|UJExrLl;#V5taRG6Fa{l%wg;Zi5v5a`=+IV@I zbwoL0iK}Z(yS4_zT%s>AjnFoX2xmWkyRX-5q;THX#Lw#ZHTfMPgSbnKp{|D7x!O)p zhq_YeN1ne8r|@r=?7#)W zN44)le|Mz6DW4Ii@l3XI2 ziUGuB;vM27F^RuuWV8IMq$N;IUtvD?Qr`RK>LD~Ls|(vK6}r(A-4XHh;% zxjJSO+CKDBXzUXGQE0R)tFf9ZzeKqSZB13lR+)0UNA{~k-S-OW{?ZO?*NL%2S?UfF zQGBK*`J3)@t0`;K{PJyWXn4jos^WmHwm*DOKJVI=xcWjE%t3<)ZEb1yw?#9aaunq$ z#4GM|h1qX8<@T6@Im8K_e=s{eMKS^h<0xV)p+Cv3!Jnw#j@rgsd_T*nIE?yOOvl;8 zCStqWrzCE5Wf4t`rTx*ZgYLf^C(>2{k3OZ_!?C$0^Coip6WKMGCuc0|DmaGZL`E6B^pq%PEvI^xKd-d~@ zMbpNlPY4^G_k8B4oKE+Pe*wiVgrxug diff --git a/core/locale/vi_VN/LC_MESSAGES/django.po b/core/locale/vi_VN/LC_MESSAGES/django.po index 6a3b0088..2a00a8f4 100644 --- a/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/core/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -110,7 +110,7 @@ msgstr "Hình ảnh" msgid "images" msgstr "Hình ảnh" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "Cổ phiếu" @@ -118,11 +118,11 @@ msgstr "Cổ phiếu" msgid "stocks" msgstr "Cổ phiếu" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "Đặt hàng sản phẩm" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "Đặt hàng sản phẩm" @@ -130,7 +130,7 @@ msgstr "Đặt hàng sản phẩm" msgid "children" msgstr "Trẻ em" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "Cấu hình" @@ -182,7 +182,7 @@ msgstr "Momental" msgid "successful" msgstr "Thành công" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "Bộ nhớ đệm I/O" @@ -206,7 +206,7 @@ msgstr "Lấy các tham số có thể truy cập của ứng dụng" msgid "send a message to the support team" msgstr "Gửi tin nhắn cho đội ngũ hỗ trợ" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "Yêu cầu URL CORSed. Chỉ cho phép https." @@ -456,7 +456,7 @@ msgstr "" "hoàn tất bằng số dư của người dùng; nếu sử dụng `force_payment`, một giao " "dịch sẽ được khởi tạo." -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "Đặt hàng mà không cần tạo tài khoản" @@ -753,236 +753,236 @@ msgstr "Xóa mối quan hệ giữa đơn hàng và sản phẩm" msgid "add or remove feedback on an order–product relation" msgstr "Thêm hoặc xóa phản hồi về mối quan hệ giữa đơn hàng và sản phẩm" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "Không có từ khóa tìm kiếm được cung cấp." -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "Tìm kiếm" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "Tên" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "Các danh mục" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "Thể loại Tiêu đề" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "Thẻ" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "Giá tối thiểu" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "Giá tối đa" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "Đang hoạt động" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "Thương hiệu" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "Thuộc tính" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "Số lượng" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "Sên" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "Is Digital" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "Bao gồm các danh mục con" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "Gồm các sản phẩm đặt hàng cá nhân" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "Mã sản phẩm" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "Phải có trường category_uuid để sử dụng cờ include_subcategories." -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "Tìm kiếm (ID, tên sản phẩm hoặc số hiệu linh kiện)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "Được mua sau (bao gồm)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "Đã mua trước đó (bao gồm)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "Địa chỉ email của người dùng" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "UUID người dùng" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "Trạng thái" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "Mã định danh dễ đọc cho con người" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "Cha mẹ" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "Toàn bộ danh mục (có ít nhất 1 sản phẩm hoặc không)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "Cấp độ" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "Mã định danh duy nhất của sản phẩm (UUID)" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "Khóa để tìm kiếm trong hoặc đặt vào bộ nhớ đệm" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "Dữ liệu cần lưu trữ trong bộ nhớ cache" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "Thời gian chờ (timeout) tính bằng giây để lưu dữ liệu vào bộ nhớ đệm." -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "Dữ liệu được lưu trữ trong bộ nhớ đệm" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 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." -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 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." -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "Thêm sản phẩm vào đơn hàng" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "Lệnh {order_uuid} không tìm thấy!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "Xóa tất cả sản phẩm khỏi đơn hàng." -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "Đặt hàng" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" "Vui lòng cung cấp một trong hai trường order_uuid hoặc order_hr_id - hai " "trường này là tương hỗ!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Loại sai đã được trả về từ phương thức order.buy(): {type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "Thực hiện một hành động trên danh sách sản phẩm theo thứ tự." -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "Xóa/Thêm" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "Hành động phải là \"thêm\" hoặc \"xóa\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "" "Thực hiện một hành động trên danh sách sản phẩm trong danh sách mong muốn." -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "Vui lòng cung cấp giá trị `wishlist_uuid`." -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "Danh sách mong muốn {wishlist_uuid} không tìm thấy!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "Thêm sản phẩm vào đơn hàng" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "Xóa sản phẩm khỏi đơn hàng" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "Đặt hàng" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" @@ -990,41 +990,41 @@ msgstr "" "Vui lòng gửi các thuộc tính dưới dạng chuỗi được định dạng như sau: " "attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "Thêm hoặc xóa phản hồi cho sản phẩm đặt hàng" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "Hành động phải là `thêm` hoặc `xóa`!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "Sản phẩm {order_product_uuid} không tìm thấy!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "Dòng địa chỉ gốc do người dùng cung cấp" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "Giới hạn phải nằm trong khoảng từ 1 đến 10." -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - hoạt động rất tốt." #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "Thuộc tính" @@ -1037,11 +1037,11 @@ msgid "groups of attributes" msgstr "Nhóm thuộc tính" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "Các danh mục" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "Thương hiệu" @@ -1050,7 +1050,7 @@ msgid "category image url" msgstr "Các danh mục" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "Tỷ lệ phần trăm đánh dấu" @@ -1073,7 +1073,7 @@ msgstr "Thẻ cho danh mục này" msgid "products in this category" msgstr "Sản phẩm trong danh mục này" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "Nhà cung cấp" @@ -1100,7 +1100,7 @@ msgid "represents feedback from a user." msgstr "Đại diện cho phản hồi từ người dùng." #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "Thông báo" @@ -1108,7 +1108,7 @@ msgstr "Thông báo" msgid "download url for this order product if applicable" msgstr "Tải xuống liên kết URL cho sản phẩm của đơn hàng này (nếu có)." -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "Phản hồi" @@ -1116,7 +1116,7 @@ msgstr "Phản hồi" msgid "a list of order products in this order" msgstr "Danh sách các sản phẩm trong đơn hàng này" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "Địa chỉ thanh toán" @@ -1145,7 +1145,7 @@ msgstr "" msgid "transactions for this order" msgstr "Giao dịch cho đơn hàng này" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "Đơn hàng" @@ -1157,19 +1157,19 @@ msgstr "URL hình ảnh" msgid "product's images" msgstr "Hình ảnh sản phẩm" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "Thể loại" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "Phản hồi" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "Thương hiệu" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "Nhóm thuộc tính" @@ -1197,7 +1197,7 @@ msgstr "Số lượng phản hồi" msgid "only available for personal orders" msgstr "Sản phẩm chỉ dành cho đơn đặt hàng cá nhân." -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "Sản phẩm" @@ -1209,15 +1209,15 @@ msgstr "Mã khuyến mãi" msgid "products on sale" msgstr "Sản phẩm đang khuyến mãi" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "Khuyến mãi" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "Nhà cung cấp" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1225,11 +1225,11 @@ msgstr "Nhà cung cấp" msgid "product" msgstr "Sản phẩm" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "Sản phẩm đã thêm vào danh sách mong muốn" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "Danh sách mong muốn" @@ -1237,7 +1237,7 @@ msgstr "Danh sách mong muốn" msgid "tagged products" msgstr "Sản phẩm được gắn thẻ" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "Thẻ sản phẩm" @@ -1323,7 +1323,7 @@ msgstr "Kết quả tìm kiếm sản phẩm" msgid "posts search results" msgstr "Kết quả tìm kiếm sản phẩm" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1336,23 +1336,23 @@ msgstr "" " việc phân loại và quản lý các thuộc tính một cách hiệu quả hơn trong một hệ" " thống phức tạp." -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "Cha mẹ của nhóm này" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "Nhóm thuộc tính cha" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "Tên nhóm thuộc tính" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "Nhóm thuộc tính" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1371,42 +1371,50 @@ msgstr "" " bổ sung, khiến nó phù hợp để sử dụng trong các hệ thống tương tác với các " "nhà cung cấp bên thứ ba." -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "" "Lưu trữ thông tin đăng nhập và các điểm cuối cần thiết cho việc giao tiếp " "API của nhà cung cấp." -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "Thông tin xác thực" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "" "Xác định định dạng đánh dấu cho các sản phẩm được lấy từ nhà cung cấp này." -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "Tỷ lệ chiết khấu của nhà cung cấp" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "Tên của nhà cung cấp này" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "Tên nhà cung cấp" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "Tệp phản hồi" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "Phản hồi xử lý cuối cùng của nhà cung cấp" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "Đường dẫn tệp tích hợp của nhà cung cấp" + +#: core/models.py:154 +msgid "integration path" +msgstr "Đường dẫn tích hợp" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1420,27 +1428,27 @@ msgstr "" "thân thiện với người dùng. Nó hỗ trợ các thao tác được xuất qua mixins và " "cung cấp tùy chỉnh metadata cho mục đích quản trị." -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "Mã định danh thẻ nội bộ cho thẻ sản phẩm" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "Tên ngày" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "Tên thân thiện với người dùng cho thẻ sản phẩm" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "Hiển thị tên thẻ" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "Thẻ sản phẩm" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " @@ -1451,15 +1459,15 @@ msgstr "" "gồm các thuộc tính cho mã định danh thẻ nội bộ và tên hiển thị thân thiện " "với người dùng." -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "Thẻ danh mục" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "Thẻ danh mục" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1480,52 +1488,52 @@ msgstr "" " hoặc quản trị viên xác định tên, mô tả và cấu trúc phân cấp của các danh " "mục, cũng như gán các thuộc tính như hình ảnh, thẻ hoặc ưu tiên." -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "Tải lên một hình ảnh đại diện cho danh mục này." -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "Hình ảnh danh mục" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "" "Xác định tỷ lệ phần trăm chiết khấu cho các sản phẩm trong danh mục này." -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "Cha của danh mục này để tạo cấu trúc phân cấp." -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "Danh mục cha" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "Tên danh mục" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "Đặt tên cho danh mục này." -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "Thêm mô tả chi tiết cho danh mục này." -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "Mô tả danh mục" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "Thẻ giúp mô tả hoặc phân loại danh mục này" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "Ưu tiên" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1538,47 +1546,47 @@ msgstr "" "các danh mục liên quan, một slug duy nhất và thứ tự ưu tiên. Nó cho phép tổ " "chức và hiển thị dữ liệu liên quan đến thương hiệu trong ứng dụng." -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "Tên của thương hiệu này" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "Tên thương hiệu" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "Tải lên logo đại diện cho thương hiệu này." -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "Hình ảnh nhỏ của thương hiệu" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "Tải lên một logo lớn đại diện cho thương hiệu này." -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "Hình ảnh thương hiệu lớn" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "Thêm mô tả chi tiết về thương hiệu" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "Mô tả thương hiệu" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "Các danh mục tùy chọn mà thương hiệu này liên kết với" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "Các danh mục" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1594,68 +1602,68 @@ msgstr "" "phần của hệ thống quản lý hàng tồn kho để cho phép theo dõi và đánh giá các " "sản phẩm có sẵn từ các nhà cung cấp khác nhau." -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "Nhà cung cấp cung cấp hàng tồn kho cho sản phẩm này." -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "Nhà cung cấp liên kết" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "Giá cuối cùng cho khách hàng sau khi cộng thêm chi phí." -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "Giá bán" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "Sản phẩm liên quan đến mục hàng tồn kho này" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "Sản phẩm liên quan" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "Giá thanh toán cho nhà cung cấp cho sản phẩm này" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "Giá mua của nhà cung cấp" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "Số lượng sản phẩm hiện có trong kho" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "Số lượng hàng tồn kho" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "Mã SKU do nhà cung cấp gán để nhận dạng sản phẩm" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "Mã SKU của nhà cung cấp" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "Tệp tin kỹ thuật số liên quan đến cổ phiếu này (nếu có)" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "Tệp tin kỹ thuật số" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "Nhập kho" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1676,52 +1684,52 @@ msgstr "" " dụng để định nghĩa và thao tác dữ liệu sản phẩm và thông tin liên quan " "trong ứng dụng." -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "Danh mục mà sản phẩm này thuộc về" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "Tùy chọn: Kết hợp sản phẩm này với một thương hiệu" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "Thẻ giúp mô tả hoặc phân loại sản phẩm này" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "" "Cho biết sản phẩm này có được phân phối dưới dạng kỹ thuật số hay không." -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "Sản phẩm có phải là sản phẩm số không?" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "Cung cấp một tên gọi rõ ràng để nhận diện sản phẩm." -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "Tên sản phẩm" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "Thêm mô tả chi tiết về sản phẩm" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "Mô tả sản phẩm" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "Số hiệu sản phẩm cho sản phẩm này" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "Số hiệu linh kiện" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "Đơn vị quản lý hàng tồn kho cho sản phẩm này" @@ -1789,11 +1797,11 @@ msgstr "Tên của thuộc tính này" msgid "attribute's name" msgstr "Tên thuộc tính" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "có thể lọc được" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "Xác định xem thuộc tính này có thể được sử dụng để lọc hay không." @@ -1850,27 +1858,27 @@ msgstr "Nội dung thay thế cho hình ảnh" msgid "upload the image file for this product" msgstr "Tải lên tệp hình ảnh cho sản phẩm này." -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "Hình ảnh sản phẩm" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "Xác định thứ tự hiển thị của các hình ảnh." -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "Ưu tiên hiển thị" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "Sản phẩm mà hình ảnh này đại diện" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "Hình ảnh sản phẩm" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1886,39 +1894,39 @@ msgstr "" "mãi và liên kết nó với các sản phẩm áp dụng. Nó tích hợp với danh mục sản " "phẩm để xác định các mặt hàng bị ảnh hưởng trong chiến dịch." -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "Giảm giá theo phần trăm cho các sản phẩm đã chọn" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "Tỷ lệ giảm giá" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "Hãy đặt một tên duy nhất cho chương trình khuyến mãi này." -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "Tên chương trình khuyến mãi" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "Mô tả chương trình khuyến mãi" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "Chọn các sản phẩm được bao gồm trong chương trình khuyến mãi này." -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "Các sản phẩm được bao gồm" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "Khuyến mãi" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1930,23 +1938,23 @@ msgstr "" " phẩm, hỗ trợ các thao tác như thêm và xóa sản phẩm, cũng như hỗ trợ các " "thao tác thêm và xóa nhiều sản phẩm cùng lúc." -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "Các sản phẩm mà người dùng đã đánh dấu là mong muốn" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "Người dùng sở hữu danh sách mong muốn này" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "Chủ sở hữu Danh sách mong muốn" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "Danh sách mong muốn" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1962,19 +1970,19 @@ msgstr "" "Nó mở rộng chức năng từ các mixin cụ thể và cung cấp các tính năng tùy chỉnh" " bổ sung." -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "Phim tài liệu" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "Phim tài liệu" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "Chưa được giải quyết" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1994,59 +2002,59 @@ msgstr "" "lý hoặc kiểm tra thêm. Lớp này cũng cho phép liên kết địa chỉ với người " "dùng, giúp quản lý dữ liệu cá nhân hóa." -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "Địa chỉ của khách hàng" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "Dòng địa chỉ" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "Phố" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "Quận" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "Thành phố" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "Khu vực" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "Mã bưu chính" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "Quốc gia" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "Điểm định vị địa lý (Kinh độ, Vĩ độ)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "Phản hồi JSON đầy đủ từ dịch vụ định vị địa lý cho địa chỉ này" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "Phản hồi JSON được lưu trữ từ dịch vụ định vị địa lý" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "Địa chỉ" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "Địa chỉ" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -2062,72 +2070,72 @@ msgstr "" "(nếu có) và trạng thái sử dụng. Nó bao gồm chức năng để xác thực và áp dụng " "mã khuyến mãi vào đơn hàng đồng thời đảm bảo các điều kiện được đáp ứng." -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "Mã duy nhất mà người dùng sử dụng để đổi lấy ưu đãi giảm giá." -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "Mã khuyến mãi" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "Số tiền giảm giá cố định được áp dụng nếu không sử dụng phần trăm." -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "Số tiền giảm giá cố định" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Giảm giá theo phần trăm sẽ được áp dụng nếu không sử dụng số tiền cố định." -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "Giảm giá theo phần trăm" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "Thời gian hết hạn của mã khuyến mãi" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "Thời hạn hiệu lực kết thúc" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "Thời gian bắt đầu hiệu lực của mã khuyến mãi này" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "Thời gian bắt đầu có hiệu lực" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "Thời gian sử dụng mã khuyến mãi, để trống nếu chưa được sử dụng." -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "Dấu thời gian sử dụng" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "Người dùng được gán mã khuyến mãi này (nếu có)." -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "Người dùng được chỉ định" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "Mã khuyến mãi" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "Mã khuyến mãi" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -2135,16 +2143,16 @@ msgstr "" "Chỉ nên định nghĩa một loại giảm giá (theo số tiền hoặc theo phần trăm), " "nhưng không nên định nghĩa cả hai hoặc không định nghĩa cả hai." -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "Mã khuyến mãi đã được sử dụng." -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Loại giảm giá không hợp lệ cho mã khuyến mãi {self.uuid}!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -2161,140 +2169,140 @@ msgstr "" "toán. Đồng thời, chức năng hỗ trợ quản lý các sản phẩm trong chu kỳ đời của " "đơn hàng." -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "Địa chỉ thanh toán được sử dụng cho đơn hàng này" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "Mã khuyến mãi tùy chọn đã được áp dụng cho đơn hàng này." -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "Đã áp dụng mã khuyến mãi" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "Địa chỉ giao hàng được sử dụng cho đơn hàng này" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "Địa chỉ giao hàng" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "Tình trạng hiện tại của đơn hàng trong chu kỳ đời sống của nó" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "Tình trạng đơn hàng" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "" "Cấu trúc JSON của thông báo hiển thị cho người dùng, trong giao diện quản " "trị (admin UI), chế độ xem bảng (table-view) được sử dụng." -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "Đại diện JSON của các thuộc tính đơn hàng cho đơn hàng này" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "Người dùng đã đặt đơn hàng" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "Người dùng" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "Thời gian ghi nhận khi đơn hàng được hoàn tất" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "Mua thời gian" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "Một định danh dễ đọc cho đơn hàng" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "ID dễ đọc cho con người" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "Đặt hàng" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "" "Một người dùng chỉ được phép có một lệnh chờ duy nhất tại một thời điểm!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "" "Bạn không thể thêm sản phẩm vào đơn hàng không phải là đơn hàng đang chờ xử " "lý." -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "Bạn không thể thêm các sản phẩm không hoạt động vào đơn hàng." -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "Bạn không thể thêm nhiều sản phẩm hơn số lượng hiện có trong kho." -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Bạn không thể xóa sản phẩm khỏi một đơn hàng không phải là đơn hàng đang chờ" " xử lý." -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} không tồn tại với truy vấn <{query}>!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "Mã khuyến mãi không tồn tại" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "" "Bạn chỉ có thể mua các sản phẩm vật lý có địa chỉ giao hàng được chỉ định!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "Địa chỉ không tồn tại" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "Bạn không thể mua hàng vào lúc này, vui lòng thử lại sau vài phút." -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "Giá trị lực không hợp lệ" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "Bạn không thể đặt hàng trống!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "Bạn không thể đặt hàng mà không có tài khoản người dùng!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "Người dùng không có số dư không thể mua bằng số dư!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "Không đủ số tiền để hoàn tất đơn hàng." -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -2303,7 +2311,7 @@ msgstr "" "sau: tên khách hàng, địa chỉ email của khách hàng, số điện thoại của khách " "hàng." -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" @@ -2311,7 +2319,7 @@ msgstr "" "Phương thức thanh toán không hợp lệ: {payment_method} từ " "{available_payment_methods}!" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2333,108 +2341,108 @@ msgstr "" "kỹ thuật số. Mô hình này tích hợp với các mô hình Order và Product và lưu " "trữ tham chiếu đến chúng." -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "Giá mà khách hàng phải trả cho sản phẩm này tại thời điểm mua hàng." -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "Giá mua tại thời điểm đặt hàng" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "Nhận xét nội bộ dành cho quản trị viên về sản phẩm đã đặt hàng này" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "Nhận xét nội bộ" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "Thông báo cho người dùng" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "Đại diện JSON của các thuộc tính của mục này" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "Thuộc tính sản phẩm đã đặt hàng" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "Tham chiếu đến đơn hàng chính chứa sản phẩm này." -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "Đơn đặt hàng của phụ huynh" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "Sản phẩm cụ thể liên quan đến dòng đơn hàng này" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "Số lượng sản phẩm cụ thể này trong đơn hàng" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "Số lượng sản phẩm" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "Tình trạng hiện tại của sản phẩm này trong đơn hàng" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "Tình trạng dòng sản phẩm" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "Sản phẩm đặt hàng phải có đơn hàng liên quan!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "Hành động sai được chỉ định cho phản hồi: {action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "Bạn không thể phản hồi đơn hàng mà bạn chưa nhận được." -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "Tên" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "Đường dẫn URL của tích hợp" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "Thông tin xác thực" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "Bạn chỉ có thể có một nhà cung cấp CRM mặc định." -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "Hệ thống Quản lý Quan hệ Khách hàng" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "Hệ thống Quản lý Quan hệ Khách hàng (CR" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "Liên kết CRM của đơn hàng" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2450,15 +2458,15 @@ msgstr "" "thị công khai hay không. Nó bao gồm một phương thức để tạo URL tải xuống tài" " sản khi đơn hàng liên quan ở trạng thái đã hoàn thành." -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "Tải xuống" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "Tải xuống" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2473,64 +2481,56 @@ msgstr "" " sử dụng các trường cơ sở dữ liệu để mô hình hóa và quản lý dữ liệu phản hồi" " một cách hiệu quả." -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "" "Những bình luận do người dùng cung cấp về trải nghiệm của họ với sản phẩm" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "Phản hồi" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "" "Tham chiếu đến sản phẩm cụ thể trong đơn hàng mà phản hồi này đề cập đến." -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "Sản phẩm liên quan đến đơn hàng" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "Đánh giá do người dùng gán cho sản phẩm" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "Đánh giá sản phẩm" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "" "Bạn phải cung cấp bình luận, đánh giá và mã UUID của sản phẩm để thêm phản " "hồi." -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "Lỗi xảy ra trong quá trình tạo mã khuyến mãi: {e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "Trang chủ" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "Liên hệ với chúng tôi" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "Giới thiệu về chúng tôi" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "Thông tin thanh toán" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "Giao hàng" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2702,11 +2702,11 @@ msgid "" " reserved" msgstr "Tất cả các quyền được bảo lưu." -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "Cả dữ liệu và thời gian chờ đều là bắt buộc." -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "" "Giá trị thời gian chờ không hợp lệ, nó phải nằm trong khoảng từ 0 đến " @@ -2740,7 +2740,7 @@ msgstr "Bạn không có quyền thực hiện hành động này." msgid "NOMINATIM_URL must be configured." msgstr "Tham số NOMINATIM_URL phải được cấu hình!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" @@ -2802,16 +2802,24 @@ 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ý." -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid là trường bắt buộc." + +#: core/views.py:315 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." -#: core/views.py:315 +#: core/views.py:318 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ố." -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "Sản phẩm đặt hàng không có sản phẩm." + +#: core/views.py:359 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." @@ -2821,11 +2829,11 @@ 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." -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "Biểu tượng trang web không tìm thấy" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2835,7 +2843,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." -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2846,7 +2854,11 @@ msgstr "" "Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng " "HTTP." -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "Trả về phiên bản hiện tại của eVibes." + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2860,7 +2872,7 @@ msgstr "" "trợ cho các lớp serializer động dựa trên hành động hiện tại, quyền truy cập " "có thể tùy chỉnh và các định dạng hiển thị." -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2874,7 +2886,7 @@ msgstr "" " ứng dụng và cung cấp một cách chuẩn hóa để xử lý yêu cầu và phản hồi cho dữ" " liệu AttributeGroup." -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2890,7 +2902,7 @@ msgstr "" " hạn như lọc theo các trường cụ thể hoặc lấy thông tin chi tiết so với thông" " tin đơn giản tùy thuộc vào yêu cầu." -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2904,7 +2916,7 @@ msgstr "" "sử dụng các trình serializer phù hợp cho các hành động khác nhau. Khả năng " "lọc được cung cấp thông qua DjangoFilterBackend." -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2918,7 +2930,7 @@ msgstr "" "của các danh mục. Chế độ xem này cũng áp dụng các quyền truy cập để đảm bảo " "chỉ những người dùng được ủy quyền mới có thể truy cập vào dữ liệu cụ thể." -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2930,7 +2942,7 @@ msgstr "" "thương hiệu. Nó sử dụng khung ViewSet của Django để đơn giản hóa việc triển " "khai các điểm cuối API cho các đối tượng thương hiệu." -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2948,7 +2960,7 @@ msgstr "" "thức để lấy thông tin chi tiết về sản phẩm, áp dụng quyền truy cập và truy " "cập phản hồi liên quan đến sản phẩm." -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2963,7 +2975,7 @@ msgstr "" "khác nhau. Mục đích của lớp này là cung cấp truy cập thuận tiện đến các tài " "nguyên liên quan đến Nhà cung cấp thông qua khung làm việc Django REST." -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2979,7 +2991,7 @@ msgstr "" "với các đối tượng Feedback có thể truy cập. Nó kế thừa từ lớp cơ sở " "`EvibesViewSet` và sử dụng hệ thống lọc của Django để truy vấn dữ liệu." -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2998,7 +3010,7 @@ msgstr "" "serializer khác nhau tùy thuộc vào hành động cụ thể đang được thực hiện và " "áp dụng quyền truy cập tương ứng khi tương tác với dữ liệu đơn hàng." -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -3013,11 +3025,11 @@ msgstr "" "hành động được yêu cầu. Ngoài ra, nó cung cấp một hành động chi tiết để xử " "lý phản hồi cho các thực thể OrderProduct." -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "Quản lý các hoạt động liên quan đến hình ảnh sản phẩm trong ứng dụng." -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." @@ -3025,15 +3037,15 @@ msgstr "" "Quản lý việc truy xuất và xử lý các thực thể PromoCode thông qua các hành " "động API khác nhau." -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "Đại diện cho một bộ xem để quản lý các chương trình khuyến mãi." -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "Quản lý các hoạt động liên quan đến dữ liệu kho trong hệ thống." -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -3052,7 +3064,7 @@ msgstr "" " bảo rằng người dùng chỉ có thể quản lý danh sách mong muốn của chính mình " "trừ khi được cấp quyền rõ ràng." -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -3066,12 +3078,12 @@ msgstr "" "chuyên biệt cho các phương thức HTTP khác nhau, các tùy chỉnh serializer và " "xử lý quyền truy cập dựa trên bối cảnh yêu cầu." -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "Lỗi địa chỉ địa lý: {e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo index 9dd63ea9ab6e2514e3bbfb940c8feaa6def88428..68b5e0fe25f8a5955236e38a0f3cf656727873b2 100644 GIT binary patch delta 13048 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 v%+7btj$4ioLJ diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.po b/core/locale/zh_Hans/LC_MESSAGES/django.po index 34a11a6c..19e0482f 100644 --- a/core/locale/zh_Hans/LC_MESSAGES/django.po +++ b/core/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,7 +106,7 @@ msgstr "图片" msgid "images" msgstr "图片" -#: core/admin.py:162 core/models.py:467 +#: core/admin.py:162 core/models.py:478 msgid "stock" msgstr "库存" @@ -114,11 +114,11 @@ msgstr "库存" msgid "stocks" msgstr "股票" -#: core/admin.py:173 core/models.py:1675 +#: core/admin.py:173 core/models.py:1670 msgid "order product" msgstr "订购产品" -#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1676 +#: core/admin.py:174 core/graphene/object_types.py:416 core/models.py:1671 msgid "order products" msgstr "订购产品" @@ -126,7 +126,7 @@ msgstr "订购产品" msgid "children" msgstr "儿童" -#: core/admin.py:940 +#: core/admin.py:943 msgid "Config" msgstr "配置" @@ -178,7 +178,7 @@ msgstr "时刻" msgid "successful" msgstr "成功" -#: core/docs/drf/views.py:17 core/graphene/mutations.py:36 +#: core/docs/drf/views.py:17 core/graphene/mutations.py:38 msgid "cache I/O" msgstr "缓存输入/输出" @@ -202,7 +202,7 @@ msgstr "获取应用程序的可公开参数" msgid "send a message to the support team" msgstr "向支持团队发送信息" -#: core/docs/drf/views.py:59 core/graphene/mutations.py:55 +#: core/docs/drf/views.py:59 core/graphene/mutations.py:58 msgid "request a CORSed URL" msgstr "请求 CORSed URL。只允许使用 https。" @@ -419,7 +419,7 @@ msgid "" "transaction is initiated." msgstr "完成订单购买。如果使用 \"force_balance\",则使用用户的余额完成购买;如果使用 \"force_payment\",则启动交易。" -#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:324 +#: core/docs/drf/viewsets.py:268 core/graphene/mutations.py:335 msgid "purchase an order without account creation" msgstr "无需创建账户即可购买订单" @@ -691,271 +691,271 @@ msgstr "删除订单-产品关系" msgid "add or remove feedback on an order–product relation" msgstr "添加或删除订单与产品关系中的反馈信息" -#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:499 +#: core/elasticsearch/__init__.py:118 core/elasticsearch/__init__.py:550 msgid "no search term provided." msgstr "未提供搜索条件。" -#: core/filters.py:65 core/filters.py:399 core/filters.py:526 +#: core/filters.py:69 core/filters.py:412 core/filters.py:539 msgid "Search" msgstr "搜索" -#: core/filters.py:66 core/filters.py:556 core/filters.py:585 +#: core/filters.py:70 core/filters.py:569 core/filters.py:598 msgid "UUID" msgstr "UUID" -#: core/filters.py:67 core/filters.py:401 core/filters.py:528 +#: core/filters.py:71 core/filters.py:414 core/filters.py:541 msgid "Name" msgstr "名称" -#: core/filters.py:68 core/filters.py:530 +#: core/filters.py:72 core/filters.py:543 msgid "Categories" msgstr "类别" -#: core/filters.py:70 +#: core/filters.py:74 msgid "Categories Slugs" msgstr "类别 蛞蝓" -#: core/filters.py:71 core/filters.py:409 +#: core/filters.py:75 core/filters.py:422 msgid "Tags" msgstr "标签" -#: core/filters.py:72 +#: core/filters.py:76 msgid "Min Price" msgstr "最低价格" -#: core/filters.py:73 +#: core/filters.py:77 msgid "Max Price" msgstr "最高价格" -#: core/filters.py:74 +#: core/filters.py:78 msgid "Is Active" msgstr "处于活动状态" -#: core/filters.py:75 +#: core/filters.py:79 msgid "Brand" msgstr "品牌" -#: core/filters.py:76 +#: core/filters.py:80 msgid "Attributes" msgstr "属性" -#: core/filters.py:77 +#: core/filters.py:81 msgid "Quantity" msgstr "数量" -#: core/filters.py:78 core/filters.py:403 core/filters.py:529 -#: core/models.py:309 core/models.py:391 core/models.py:544 +#: core/filters.py:82 core/filters.py:416 core/filters.py:542 +#: core/models.py:320 core/models.py:402 core/models.py:556 msgid "Slug" msgstr "蛞蝓" -#: core/filters.py:79 +#: core/filters.py:83 msgid "Is Digital" msgstr "是数字" -#: core/filters.py:80 +#: core/filters.py:84 msgid "Include sub-categories" msgstr "包括子类别" -#: core/filters.py:83 +#: core/filters.py:87 msgid "Include personal ordered" msgstr "包括个人订购的产品" -#: core/filters.py:85 core/models.py:548 +#: core/filters.py:89 core/models.py:560 msgid "SKU" msgstr "商品编号" -#: core/filters.py:161 +#: core/filters.py:173 msgid "there must be a category_uuid to use include_subcategories flag" msgstr "必须有 category_uuid 才能使用 include_subcategories 标志" -#: core/filters.py:326 +#: core/filters.py:339 msgid "Search (ID, product name or part number)" msgstr "搜索(ID、产品名称或零件编号)" -#: core/filters.py:329 +#: core/filters.py:342 msgid "Bought after (inclusive)" msgstr "之后购买(含)" -#: core/filters.py:330 +#: core/filters.py:343 msgid "Bought before (inclusive)" msgstr "之前购买(含)" -#: core/filters.py:333 core/filters.py:380 core/filters.py:587 +#: core/filters.py:346 core/filters.py:393 core/filters.py:600 msgid "User email" msgstr "用户电子邮件" -#: core/filters.py:334 core/filters.py:381 core/filters.py:565 -#: core/filters.py:586 +#: core/filters.py:347 core/filters.py:394 core/filters.py:578 +#: core/filters.py:599 msgid "User UUID" msgstr "用户 UUID" -#: core/filters.py:335 +#: core/filters.py:348 msgid "Status" msgstr "现状" -#: core/filters.py:339 +#: core/filters.py:352 msgid "Human Readable ID" msgstr "人可读 ID" -#: core/filters.py:402 +#: core/filters.py:415 msgid "Parent" msgstr "家长" -#: core/filters.py:406 +#: core/filters.py:419 msgid "Whole category(has at least 1 product or not)" msgstr "整个类别(是否至少有 1 个产品)" -#: core/filters.py:410 +#: core/filters.py:423 msgid "Level" msgstr "级别" -#: core/filters.py:560 +#: core/filters.py:573 msgid "Product UUID" msgstr "产品 UUID" -#: core/graphene/mutations.py:39 +#: core/graphene/mutations.py:41 msgid "key to look for in or set into the cache" msgstr "在缓存中查找或设置的关键字" -#: core/graphene/mutations.py:40 +#: core/graphene/mutations.py:42 msgid "data to store in cache" msgstr "缓存中要存储的数据" -#: core/graphene/mutations.py:43 +#: core/graphene/mutations.py:45 msgid "timeout in seconds to set the data for into the cache" msgstr "将数据设置为缓存的超时(以秒为单位" -#: core/graphene/mutations.py:46 +#: core/graphene/mutations.py:48 msgid "cached data" msgstr "缓存数据" -#: core/graphene/mutations.py:60 +#: core/graphene/mutations.py:63 msgid "camelized JSON data from the requested URL" msgstr "从请求的 URL 中获取驼峰化 JSON 数据" -#: core/graphene/mutations.py:65 core/views.py:232 +#: core/graphene/mutations.py:68 core/views.py:232 msgid "only URLs starting with http(s):// are allowed" msgstr "只允许使用以 http(s):// 开头的 URL" -#: core/graphene/mutations.py:80 +#: core/graphene/mutations.py:84 msgid "add a product to the order" msgstr "在订单中添加产品" -#: core/graphene/mutations.py:101 core/graphene/mutations.py:127 -#: core/graphene/mutations.py:232 core/graphene/mutations.py:279 +#: core/graphene/mutations.py:105 core/graphene/mutations.py:132 +#: core/graphene/mutations.py:240 core/graphene/mutations.py:288 #, python-brace-format msgid "order {order_uuid} not found" msgstr "未找到 {order_uuid} 订单!" -#: core/graphene/mutations.py:106 core/graphene/mutations.py:153 +#: core/graphene/mutations.py:111 core/graphene/mutations.py:160 msgid "remove a product from the order" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:132 +#: core/graphene/mutations.py:138 msgid "remove all products from the order" msgstr "从订单中删除所有产品" -#: core/graphene/mutations.py:175 +#: core/graphene/mutations.py:183 msgid "buy an order" msgstr "购买订单" -#: core/graphene/mutations.py:204 core/graphene/mutations.py:257 +#: core/graphene/mutations.py:212 core/graphene/mutations.py:266 msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" -#: core/graphene/mutations.py:229 core/graphene/mutations.py:486 -#: core/graphene/mutations.py:527 core/viewsets.py:680 +#: core/graphene/mutations.py:237 core/graphene/mutations.py:502 +#: core/graphene/mutations.py:544 core/viewsets.py:695 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" -#: core/graphene/mutations.py:237 +#: core/graphene/mutations.py:246 msgid "perform an action on a list of products in the order" msgstr "对订单中的产品列表执行操作" -#: core/graphene/mutations.py:242 +#: core/graphene/mutations.py:251 msgid "remove/add" msgstr "删除/添加" -#: core/graphene/mutations.py:274 core/graphene/mutations.py:314 +#: core/graphene/mutations.py:283 core/graphene/mutations.py:324 msgid "action must be either add or remove" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: core/graphene/mutations.py:284 +#: core/graphene/mutations.py:294 msgid "perform an action on a list of products in the wishlist" msgstr "对愿望清单中的产品列表执行操作" -#: core/graphene/mutations.py:302 +#: core/graphene/mutations.py:312 msgid "please provide wishlist_uuid value" msgstr "请提供 `wishlist_uuid` 值。" -#: core/graphene/mutations.py:319 core/graphene/mutations.py:392 -#: core/graphene/mutations.py:419 core/graphene/mutations.py:446 -#: core/graphene/mutations.py:489 +#: core/graphene/mutations.py:329 core/graphene/mutations.py:405 +#: core/graphene/mutations.py:433 core/graphene/mutations.py:461 +#: core/graphene/mutations.py:505 #, python-brace-format msgid "wishlist {wishlist_uuid} not found" msgstr "未找到 Wishlist {wishlist_uuid}!" -#: core/graphene/mutations.py:370 +#: core/graphene/mutations.py:383 msgid "add a product to the wishlist" msgstr "在订单中添加产品" -#: core/graphene/mutations.py:397 +#: core/graphene/mutations.py:411 msgid "remove a product from the wishlist" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:424 +#: core/graphene/mutations.py:439 msgid "remove all products from the wishlist" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:451 +#: core/graphene/mutations.py:467 msgid "buy all products from the wishlist" msgstr "从订单中删除产品" -#: core/graphene/mutations.py:494 +#: core/graphene/mutations.py:511 msgid "buy a product" msgstr "购买订单" -#: core/graphene/mutations.py:500 +#: core/graphene/mutations.py:517 msgid "" "please send the attributes as the string formatted like " "attr1=value1,attr2=value2" msgstr "请以字符串形式发送属性,格式如 attr1=value1,attr2=value2" -#: core/graphene/mutations.py:532 +#: core/graphene/mutations.py:550 msgid "add or delete a feedback for orderproduct" msgstr "添加或删除订单产品的反馈信息" -#: core/graphene/mutations.py:556 +#: core/graphene/mutations.py:574 msgid "action must be either `add` or `remove`" msgstr "操作必须是 \"添加 \"或 \"删除\"!" -#: core/graphene/mutations.py:559 +#: core/graphene/mutations.py:577 #, python-brace-format msgid "order product {order_product_uuid} not found" msgstr "未找到订购产品 {order_product_uuid}!" -#: core/graphene/mutations.py:622 +#: core/graphene/mutations.py:644 msgid "original address string provided by the user" msgstr "用户提供的原始地址字符串" -#: core/graphene/mutations.py:656 core/models.py:857 core/models.py:870 -#: core/models.py:1289 core/models.py:1318 core/models.py:1343 -#: core/viewsets.py:683 +#: core/graphene/mutations.py:680 core/models.py:856 core/models.py:869 +#: core/models.py:1284 core/models.py:1313 core/models.py:1338 +#: core/viewsets.py:698 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: core/graphene/mutations.py:669 +#: core/graphene/mutations.py:694 msgid "limit must be between 1 and 10" msgstr "限值必须在 1 和 10 之间" -#: core/graphene/mutations.py:714 +#: core/graphene/mutations.py:743 msgid "elasticsearch - works like a charm" msgstr "ElasticSearch - 工作起来得心应手" #: core/graphene/object_types.py:82 core/graphene/object_types.py:397 -#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1152 -#: core/models.py:1752 +#: core/graphene/object_types.py:444 core/models.py:680 core/models.py:1151 +#: core/models.py:1749 msgid "attributes" msgstr "属性" @@ -968,11 +968,11 @@ msgid "groups of attributes" msgstr "属性组" #: core/graphene/object_types.py:116 core/graphene/object_types.py:193 -#: core/graphene/object_types.py:224 core/models.py:334 core/models.py:634 +#: core/graphene/object_types.py:224 core/models.py:345 core/models.py:634 msgid "categories" msgstr "类别" -#: core/graphene/object_types.py:124 core/models.py:405 +#: core/graphene/object_types.py:124 core/models.py:416 msgid "brands" msgstr "品牌" @@ -981,7 +981,7 @@ msgid "category image url" msgstr "类别" #: core/graphene/object_types.py:196 core/graphene/object_types.py:344 -#: core/models.py:271 +#: core/models.py:282 msgid "markup percentage" msgstr "加价百分比" @@ -1002,7 +1002,7 @@ msgstr "此类别的标签" msgid "products in this category" msgstr "该类别中的产品" -#: core/graphene/object_types.py:351 core/models.py:177 +#: core/graphene/object_types.py:351 core/models.py:187 msgid "vendors" msgstr "供应商" @@ -1027,7 +1027,7 @@ msgid "represents feedback from a user." msgstr "代表用户的反馈意见。" #: core/graphene/object_types.py:398 core/graphene/object_types.py:445 -#: core/models.py:1146 +#: core/models.py:1145 msgid "notifications" msgstr "通知" @@ -1035,7 +1035,7 @@ msgstr "通知" msgid "download url for this order product if applicable" msgstr "此订单产品的下载网址(如适用" -#: core/graphene/object_types.py:400 core/models.py:1868 +#: core/graphene/object_types.py:400 core/models.py:1865 msgid "feedback" msgstr "反馈意见" @@ -1043,7 +1043,7 @@ msgstr "反馈意见" msgid "a list of order products in this order" msgstr "该订单中的订单产品列表" -#: core/graphene/object_types.py:436 core/models.py:1116 +#: core/graphene/object_types.py:436 core/models.py:1115 msgid "billing address" msgstr "账单地址" @@ -1069,7 +1069,7 @@ msgstr "订单中的所有产品都是数字产品吗?" msgid "transactions for this order" msgstr "此订单的交易" -#: core/graphene/object_types.py:465 core/models.py:1180 +#: core/graphene/object_types.py:465 core/models.py:1179 msgid "orders" msgstr "订单" @@ -1081,19 +1081,19 @@ msgstr "图片 URL" msgid "product's images" msgstr "产品图片" -#: core/graphene/object_types.py:500 core/models.py:333 core/models.py:487 +#: core/graphene/object_types.py:500 core/models.py:344 core/models.py:498 msgid "category" msgstr "类别" -#: core/graphene/object_types.py:502 core/models.py:1869 +#: core/graphene/object_types.py:502 core/models.py:1866 msgid "feedbacks" msgstr "反馈意见" -#: core/graphene/object_types.py:503 core/models.py:404 core/models.py:496 +#: core/graphene/object_types.py:503 core/models.py:415 core/models.py:507 msgid "brand" msgstr "品牌" -#: core/graphene/object_types.py:504 core/models.py:102 +#: core/graphene/object_types.py:504 core/models.py:105 msgid "attribute groups" msgstr "属性组" @@ -1121,7 +1121,7 @@ msgstr "反馈数量" msgid "only available for personal orders" msgstr "仅限个人订购的产品" -#: core/graphene/object_types.py:534 core/models.py:558 +#: core/graphene/object_types.py:534 core/models.py:570 msgid "products" msgstr "产品" @@ -1133,15 +1133,15 @@ msgstr "促销代码" msgid "products on sale" msgstr "销售产品" -#: core/graphene/object_types.py:651 core/models.py:806 +#: core/graphene/object_types.py:651 core/models.py:805 msgid "promotions" msgstr "促销活动" -#: core/graphene/object_types.py:655 core/models.py:176 +#: core/graphene/object_types.py:655 core/models.py:186 msgid "vendor" msgstr "供应商" -#: core/graphene/object_types.py:656 core/models.py:557 +#: core/graphene/object_types.py:656 core/models.py:569 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:107 #: core/templates/shipped_order_created_email.html:107 @@ -1149,11 +1149,11 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: core/graphene/object_types.py:667 core/models.py:829 +#: core/graphene/object_types.py:667 core/models.py:828 msgid "wishlisted products" msgstr "心愿单上的产品" -#: core/graphene/object_types.py:673 core/models.py:846 +#: core/graphene/object_types.py:673 core/models.py:845 msgid "wishlists" msgstr "愿望清单" @@ -1161,7 +1161,7 @@ msgstr "愿望清单" msgid "tagged products" msgstr "标签产品" -#: core/graphene/object_types.py:684 core/models.py:212 core/models.py:502 +#: core/graphene/object_types.py:684 core/models.py:223 core/models.py:513 msgid "product tags" msgstr "产品标签" @@ -1246,7 +1246,7 @@ msgstr "产品搜索结果" msgid "posts search results" msgstr "产品搜索结果" -#: core/models.py:71 +#: core/models.py:74 msgid "" "Represents a group of attributes, which can be hierarchical. This class is " "used to manage and organize attribute groups. An attribute group can have a " @@ -1255,23 +1255,23 @@ msgid "" msgstr "" "代表一组属性,可以是分层的。该类用于管理和组织属性组。一个属性组可以有一个父组,从而形成一个层次结构。这有助于在复杂的系统中更有效地分类和管理属性。" -#: core/models.py:87 +#: core/models.py:90 msgid "parent of this group" msgstr "本组家长" -#: core/models.py:88 +#: core/models.py:91 msgid "parent attribute group" msgstr "父属性组" -#: core/models.py:92 core/models.py:93 +#: core/models.py:95 core/models.py:96 msgid "attribute group's name" msgstr "属性组名称" -#: core/models.py:101 core/models.py:642 +#: core/models.py:104 core/models.py:642 msgid "attribute group" msgstr "属性组" -#: core/models.py:107 +#: core/models.py:110 msgid "" "Represents a vendor entity capable of storing information about external " "vendors and their interaction requirements. The Vendor class is used to " @@ -1283,39 +1283,47 @@ msgid "" msgstr "" "代表一个供应商实体,能够存储有关外部供应商及其交互要求的信息。供应商类用于定义和管理与外部供应商相关的信息。它存储供应商的名称、通信所需的身份验证详细信息,以及从供应商处检索产品时所应用的百分比标记。该模型还维护附加的元数据和约束,使其适用于与第三方供应商交互的系统。" -#: core/models.py:120 +#: core/models.py:123 msgid "stores credentials and endpoints required for vendor communication" msgstr "存储供应商应用程序接口通信所需的凭证和端点" -#: core/models.py:121 +#: core/models.py:124 msgid "authentication info" msgstr "认证信息" -#: core/models.py:126 +#: core/models.py:129 msgid "define the markup for products retrieved from this vendor" msgstr "定义从该供应商获取的产品的标记" -#: core/models.py:127 +#: core/models.py:130 msgid "vendor markup percentage" msgstr "供应商加价百分比" -#: core/models.py:131 +#: core/models.py:134 msgid "name of this vendor" msgstr "供应商名称" -#: core/models.py:132 +#: core/models.py:135 msgid "vendor name" msgstr "供应商名称" -#: core/models.py:143 +#: core/models.py:146 msgid "response file" msgstr "回复文件" -#: core/models.py:144 +#: core/models.py:147 msgid "vendor's last processing response" msgstr "供应商最后的处理回复" -#: core/models.py:185 +#: core/models.py:153 +msgid "vendor's integration file path" +msgstr "供应商的集成文件路径" + +#: core/models.py:154 +msgid "integration path" +msgstr "整合路径" + +#: core/models.py:196 msgid "" "Represents a product tag used for classifying or identifying products. The " "ProductTag class is designed to uniquely identify and classify products " @@ -1326,42 +1334,42 @@ msgstr "" "代表用于分类或识别产品的产品标签。ProductTag " "类旨在通过内部标签标识符和用户友好显示名称的组合,对产品进行唯一标识和分类。它支持通过混合功能导出的操作,并为管理目的提供元数据定制功能。" -#: core/models.py:197 core/models.py:228 +#: core/models.py:208 core/models.py:239 msgid "internal tag identifier for the product tag" msgstr "产品标签的内部标签标识符" -#: core/models.py:198 core/models.py:229 +#: core/models.py:209 core/models.py:240 msgid "tag name" msgstr "标签名称" -#: core/models.py:202 core/models.py:233 +#: core/models.py:213 core/models.py:244 msgid "user-friendly name for the product tag" msgstr "方便用户使用的产品标签名称" -#: core/models.py:203 core/models.py:234 +#: core/models.py:214 core/models.py:245 msgid "tag display name" msgstr "标签显示名称" -#: core/models.py:211 +#: core/models.py:222 msgid "product tag" msgstr "产品标签" -#: core/models.py:217 +#: core/models.py:228 msgid "" "Represents a category tag used for products. This class models a category " "tag that can be used to associate and classify products. It includes " "attributes for an internal tag identifier and a user-friendly display name." msgstr "代表用于产品的类别标签。该类是类别标签的模型,可用于关联和分类产品。它包括内部标签标识符和用户友好显示名称的属性。" -#: core/models.py:242 +#: core/models.py:253 msgid "category tag" msgstr "类别标签" -#: core/models.py:243 core/models.py:315 +#: core/models.py:254 core/models.py:326 msgid "category tags" msgstr "类别标签" -#: core/models.py:248 +#: core/models.py:259 msgid "" "Represents a category entity to organize and group related items in a " "hierarchical structure. Categories may have hierarchical relationships with " @@ -1375,51 +1383,51 @@ msgid "" msgstr "" "代表类别实体,用于在分层结构中组织和分组相关项目。类别可与其他类别建立层次关系,支持父子关系。该类包括元数据和可视化表示字段,是类别相关功能的基础。该类通常用于定义和管理应用程序中的产品类别或其他类似分组,允许用户或管理员指定类别的名称、描述和层次结构,以及分配图像、标记或优先级等属性。" -#: core/models.py:262 +#: core/models.py:273 msgid "upload an image representing this category" msgstr "上传代表该类别的图片" -#: core/models.py:265 +#: core/models.py:276 msgid "category image" msgstr "类别 图像" -#: core/models.py:270 +#: core/models.py:281 msgid "define a markup percentage for products in this category" msgstr "定义该类别产品的加价百分比" -#: core/models.py:279 +#: core/models.py:290 msgid "parent of this category to form a hierarchical structure" msgstr "该类别的父类别,形成等级结构" -#: core/models.py:280 +#: core/models.py:291 msgid "parent category" msgstr "父类" -#: core/models.py:285 +#: core/models.py:296 msgid "category name" msgstr "类别名称" -#: core/models.py:286 +#: core/models.py:297 msgid "provide a name for this category" msgstr "提供该类别的名称" -#: core/models.py:293 +#: core/models.py:304 msgid "add a detailed description for this category" msgstr "为该类别添加详细说明" -#: core/models.py:294 +#: core/models.py:305 msgid "category description" msgstr "类别说明" -#: core/models.py:314 +#: core/models.py:325 msgid "tags that help describe or group this category" msgstr "有助于描述或归类该类别的标签" -#: core/models.py:321 core/models.py:397 +#: core/models.py:332 core/models.py:408 msgid "priority" msgstr "优先权" -#: core/models.py:340 +#: core/models.py:351 msgid "" "Represents a Brand object in the system. This class handles information and " "attributes related to a brand, including its name, logos, description, " @@ -1429,47 +1437,47 @@ msgid "" msgstr "" "代表系统中的品牌对象。该类用于处理与品牌相关的信息和属性,包括名称、徽标、描述、相关类别、唯一标签和优先顺序。它允许在应用程序中组织和表示与品牌相关的数据。" -#: core/models.py:350 +#: core/models.py:361 msgid "name of this brand" msgstr "品牌名称" -#: core/models.py:351 +#: core/models.py:362 msgid "brand name" msgstr "品牌名称" -#: core/models.py:358 +#: core/models.py:369 msgid "upload a logo representing this brand" msgstr "上传代表该品牌的徽标" -#: core/models.py:360 +#: core/models.py:371 msgid "brand small image" msgstr "品牌小形象" -#: core/models.py:366 +#: core/models.py:377 msgid "upload a big logo representing this brand" msgstr "上传代表该品牌的大徽标" -#: core/models.py:368 +#: core/models.py:379 msgid "brand big image" msgstr "品牌大形象" -#: core/models.py:373 +#: core/models.py:384 msgid "add a detailed description of the brand" msgstr "添加品牌的详细描述" -#: core/models.py:374 +#: core/models.py:385 msgid "brand description" msgstr "品牌描述" -#: core/models.py:379 +#: core/models.py:390 msgid "optional categories that this brand is associated with" msgstr "与该品牌相关的可选类别" -#: core/models.py:380 +#: core/models.py:391 msgid "associated categories" msgstr "类别" -#: core/models.py:410 +#: core/models.py:421 msgid "" "Represents the stock of a product managed in the system. This class provides" " details about the relationship between vendors, products, and their stock " @@ -1481,68 +1489,68 @@ msgstr "" "代表系统中管理的产品库存。该类提供有关供应商、产品及其库存信息之间关系的详细信息,以及与库存相关的属性,如价格、购买价格、数量、SKU " "和数字资产。它是库存管理系统的一部分,用于跟踪和评估不同供应商提供的产品。" -#: core/models.py:422 +#: core/models.py:433 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: core/models.py:423 +#: core/models.py:434 msgid "associated vendor" msgstr "相关供应商" -#: core/models.py:427 +#: core/models.py:438 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: core/models.py:428 +#: core/models.py:439 msgid "selling price" msgstr "销售价格" -#: core/models.py:433 +#: core/models.py:444 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: core/models.py:434 core/models.py:705 core/models.py:752 -#: core/models.py:1649 +#: core/models.py:445 core/models.py:705 core/models.py:751 +#: core/models.py:1644 msgid "associated product" msgstr "相关产品" -#: core/models.py:441 +#: core/models.py:452 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: core/models.py:442 +#: core/models.py:453 msgid "vendor purchase price" msgstr "供应商购买价格" -#: core/models.py:446 +#: core/models.py:457 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: core/models.py:447 +#: core/models.py:458 msgid "quantity in stock" msgstr "库存数量" -#: core/models.py:451 +#: core/models.py:462 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: core/models.py:452 +#: core/models.py:463 msgid "vendor sku" msgstr "供应商 SKU" -#: core/models.py:458 +#: core/models.py:469 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: core/models.py:459 +#: core/models.py:470 msgid "digital file" msgstr "数字文件" -#: core/models.py:468 +#: core/models.py:479 msgid "stock entries" msgstr "库存条目" -#: core/models.py:473 +#: core/models.py:484 msgid "" "Represents a product with attributes such as category, brand, tags, digital " "status, name, description, part number, and slug. Provides related utility " @@ -1556,51 +1564,51 @@ msgstr "" "代表产品的属性,如类别、品牌、标签、数字状态、名称、描述、零件编号和标签。提供相关的实用属性,以检索评级、反馈计数、价格、数量和订单总数。设计用于处理电子商务或库存管理的系统。该类可与相关模型(如类别、品牌和" " ProductTag)交互,并对频繁访问的属性进行缓存管理,以提高性能。它用于在应用程序中定义和操作产品数据及其相关信息。" -#: core/models.py:486 +#: core/models.py:497 msgid "category this product belongs to" msgstr "该产品所属类别" -#: core/models.py:495 +#: core/models.py:506 msgid "optionally associate this product with a brand" msgstr "可选择将该产品与某个品牌联系起来" -#: core/models.py:501 +#: core/models.py:512 msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: core/models.py:506 +#: core/models.py:517 msgid "indicates whether this product is digitally delivered" msgstr "表示该产品是否以数字方式交付" -#: core/models.py:507 +#: core/models.py:518 msgid "is product digital" msgstr "产品是否数字化" -#: core/models.py:513 +#: core/models.py:524 msgid "provide a clear identifying name for the product" msgstr "为产品提供一个明确的标识名称" -#: core/models.py:514 +#: core/models.py:525 msgid "product name" msgstr "产品名称" -#: core/models.py:519 core/models.py:794 +#: core/models.py:531 core/models.py:793 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" -#: core/models.py:520 +#: core/models.py:532 msgid "product description" msgstr "产品说明" -#: core/models.py:527 +#: core/models.py:539 msgid "part number for this product" msgstr "该产品的零件编号" -#: core/models.py:528 +#: core/models.py:540 msgid "part number" msgstr "部件编号" -#: core/models.py:547 +#: core/models.py:559 msgid "stock keeping unit for this product" msgstr "该产品的库存单位" @@ -1663,11 +1671,11 @@ msgstr "该属性的名称" msgid "attribute's name" msgstr "属性名称" -#: core/models.py:667 +#: core/models.py:666 msgid "is filterable" msgstr "可过滤" -#: core/models.py:668 +#: core/models.py:667 msgid "designates whether this attribute can be used for filtering or not" msgstr "指定该属性是否可用于筛选" @@ -1717,27 +1725,27 @@ msgstr "图片 alt 文本" msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: core/models.py:739 core/models.py:764 +#: core/models.py:739 core/models.py:763 msgid "product image" msgstr "产品图片" -#: core/models.py:745 +#: core/models.py:744 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: core/models.py:746 +#: core/models.py:745 msgid "display priority" msgstr "显示优先级" -#: core/models.py:751 +#: core/models.py:750 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: core/models.py:765 +#: core/models.py:764 msgid "product images" msgstr "产品图片" -#: core/models.py:770 +#: core/models.py:769 msgid "" "Represents a promotional campaign for products with a discount. This class " "is used to define and manage promotional campaigns that offer a percentage-" @@ -1748,39 +1756,39 @@ msgid "" msgstr "" "代表有折扣的产品促销活动。该类用于定义和管理为产品提供百分比折扣的促销活动。该类包括用于设置折扣率、提供促销详情以及将其链接到适用产品的属性。它与产品目录集成,以确定促销活动中受影响的产品。" -#: core/models.py:782 +#: core/models.py:781 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: core/models.py:783 +#: core/models.py:782 msgid "discount percentage" msgstr "折扣百分比" -#: core/models.py:788 +#: core/models.py:787 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: core/models.py:789 +#: core/models.py:788 msgid "promotion name" msgstr "推广名称" -#: core/models.py:795 +#: core/models.py:794 msgid "promotion description" msgstr "促销说明" -#: core/models.py:800 +#: core/models.py:799 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: core/models.py:801 +#: core/models.py:800 msgid "included products" msgstr "包括产品" -#: core/models.py:805 +#: core/models.py:804 msgid "promotion" msgstr "促销活动" -#: core/models.py:816 +#: core/models.py:815 msgid "" "Represents a user's wishlist for storing and managing desired products. The " "class provides functionality to manage a collection of products, supporting " @@ -1788,23 +1796,23 @@ msgid "" "operations for adding and removing multiple products at once." msgstr "代表用户用于存储和管理所需产品的愿望清单。该类提供管理产品集合的功能,支持添加和删除产品等操作,还支持同时添加和删除多个产品的操作。" -#: core/models.py:828 +#: core/models.py:827 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: core/models.py:836 +#: core/models.py:835 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: core/models.py:837 +#: core/models.py:836 msgid "wishlist owner" msgstr "心愿单所有者" -#: core/models.py:845 +#: core/models.py:844 msgid "wishlist" msgstr "愿望清单" -#: core/models.py:887 +#: core/models.py:886 msgid "" "Represents a documentary record tied to a product. This class is used to " "store information about documentaries related to specific products, " @@ -1815,19 +1823,19 @@ msgid "" msgstr "" "代表与产品相关的文档记录。该类用于存储与特定产品相关的文档信息,包括文件上传及其元数据。它包含处理文件类型和文档文件存储路径的方法和属性。它扩展了特定混合类的功能,并提供了额外的自定义功能。" -#: core/models.py:900 +#: core/models.py:899 msgid "documentary" msgstr "纪录片" -#: core/models.py:901 +#: core/models.py:900 msgid "documentaries" msgstr "纪录片" -#: core/models.py:911 +#: core/models.py:910 msgid "unresolved" msgstr "未解决" -#: core/models.py:916 +#: core/models.py:915 msgid "" "Represents an address entity that includes location details and associations" " with a user. Provides functionality for geographic and address data " @@ -1841,59 +1849,59 @@ msgstr "" "代表一个地址实体,其中包括位置详情以及与用户的关联。提供地理和地址数据存储功能,以及与地理编码服务集成的功能。该类旨在存储详细的地址信息,包括街道、城市、地区、国家和地理位置(经度和纬度)等组件。它支持与地理编码" " API 集成,可存储原始 API 响应,以便进一步处理或检查。该类还可以将地址与用户关联起来,方便个性化数据处理。" -#: core/models.py:931 +#: core/models.py:930 msgid "address line for the customer" msgstr "客户地址栏" -#: core/models.py:932 +#: core/models.py:931 msgid "address line" msgstr "地址栏" -#: core/models.py:934 +#: core/models.py:933 msgid "street" msgstr "街道" -#: core/models.py:935 +#: core/models.py:934 msgid "district" msgstr "地区" -#: core/models.py:936 +#: core/models.py:935 msgid "city" msgstr "城市" -#: core/models.py:937 +#: core/models.py:936 msgid "region" msgstr "地区" -#: core/models.py:938 +#: core/models.py:937 msgid "postal code" msgstr "邮政编码" -#: core/models.py:939 +#: core/models.py:938 msgid "country" msgstr "国家" -#: core/models.py:946 +#: core/models.py:945 msgid "geolocation point: (longitude, latitude)" msgstr "地理位置点(经度、纬度)" -#: core/models.py:949 +#: core/models.py:948 msgid "full JSON response from geocoder for this address" msgstr "地理编码器对此地址的完整 JSON 响应" -#: core/models.py:954 +#: core/models.py:953 msgid "stored JSON response from the geocoding service" msgstr "存储的来自地理编码服务的 JSON 响应" -#: core/models.py:962 +#: core/models.py:961 msgid "address" msgstr "地址" -#: core/models.py:963 +#: core/models.py:962 msgid "addresses" msgstr "地址" -#: core/models.py:975 +#: core/models.py:974 msgid "" "Represents a promotional code that can be used for discounts, managing its " "validity, type of discount, and application. The PromoCode class stores " @@ -1905,86 +1913,86 @@ msgstr "" "代表可用于折扣的促销代码,管理其有效期、折扣类型和应用。PromoCode " "类存储促销代码的详细信息,包括其唯一标识符、折扣属性(金额或百分比)、有效期、关联用户(如有)及其使用状态。该类包含验证促销代码并将其应用于订单的功能,同时确保符合约束条件。" -#: core/models.py:989 +#: core/models.py:988 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: core/models.py:990 +#: core/models.py:989 msgid "promo code identifier" msgstr "促销代码标识符" -#: core/models.py:997 +#: core/models.py:996 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: core/models.py:998 +#: core/models.py:997 msgid "fixed discount amount" msgstr "固定折扣额" -#: core/models.py:1004 +#: core/models.py:1003 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: core/models.py:1005 +#: core/models.py:1004 msgid "percentage discount" msgstr "折扣百分比" -#: core/models.py:1010 +#: core/models.py:1009 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: core/models.py:1011 +#: core/models.py:1010 msgid "end validity time" msgstr "结束有效时间" -#: core/models.py:1016 +#: core/models.py:1015 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: core/models.py:1017 +#: core/models.py:1016 msgid "start validity time" msgstr "开始有效时间" -#: core/models.py:1022 +#: core/models.py:1021 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: core/models.py:1023 +#: core/models.py:1022 msgid "usage timestamp" msgstr "使用时间戳" -#: core/models.py:1028 +#: core/models.py:1027 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: core/models.py:1029 +#: core/models.py:1028 msgid "assigned user" msgstr "指定用户" -#: core/models.py:1036 +#: core/models.py:1035 msgid "promo code" msgstr "促销代码" -#: core/models.py:1037 +#: core/models.py:1036 msgid "promo codes" msgstr "促销代码" -#: core/models.py:1052 +#: core/models.py:1051 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: core/models.py:1073 +#: core/models.py:1072 msgid "promocode already used" msgstr "促销代码已被使用" -#: core/models.py:1089 +#: core/models.py:1088 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效!" -#: core/models.py:1098 +#: core/models.py:1097 msgid "" "Represents an order placed by a user. This class models an order within the " "application, including its various attributes such as billing and shipping " @@ -1995,144 +2003,144 @@ msgid "" msgstr "" "代表用户下达的订单。该类在应用程序中模拟订单,包括订单的各种属性,如账单和发货信息、状态、关联用户、通知和相关操作。订单可以有关联的产品,可以应用促销活动,设置地址,更新发货或账单详情。同样,该功能还支持在订单生命周期中管理产品。" -#: core/models.py:1115 +#: core/models.py:1114 msgid "the billing address used for this order" msgstr "该订单使用的账单地址" -#: core/models.py:1123 +#: core/models.py:1122 msgid "optional promo code applied to this order" msgstr "此订单可选择使用促销代码" -#: core/models.py:1124 +#: core/models.py:1123 msgid "applied promo code" msgstr "应用促销代码" -#: core/models.py:1132 +#: core/models.py:1131 msgid "the shipping address used for this order" msgstr "该订单使用的送货地址" -#: core/models.py:1133 +#: core/models.py:1132 msgid "shipping address" msgstr "送货地址" -#: core/models.py:1139 +#: core/models.py:1138 msgid "current status of the order in its lifecycle" msgstr "订单在其生命周期中的当前状态" -#: core/models.py:1140 +#: core/models.py:1139 msgid "order status" msgstr "订单状态" -#: core/models.py:1145 core/models.py:1626 +#: core/models.py:1144 core/models.py:1621 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" -#: core/models.py:1151 +#: core/models.py:1150 msgid "json representation of order attributes for this order" msgstr "该订单属性的 JSON 表示形式" -#: core/models.py:1157 +#: core/models.py:1156 msgid "the user who placed the order" msgstr "下订单的用户" -#: core/models.py:1158 +#: core/models.py:1157 msgid "user" msgstr "用户" -#: core/models.py:1164 +#: core/models.py:1163 msgid "the timestamp when the order was finalized" msgstr "订单确定的时间戳" -#: core/models.py:1165 +#: core/models.py:1164 msgid "buy time" msgstr "购买时间" -#: core/models.py:1172 +#: core/models.py:1171 msgid "a human-readable identifier for the order" msgstr "订单的人工可读标识符" -#: core/models.py:1173 +#: core/models.py:1172 msgid "human readable id" msgstr "人类可读 ID" -#: core/models.py:1179 +#: core/models.py:1178 msgid "order" msgstr "订购" -#: core/models.py:1217 +#: core/models.py:1220 msgid "a user must have only one pending order at a time" msgstr "用户每次只能有一个挂单!" -#: core/models.py:1257 +#: core/models.py:1252 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: core/models.py:1262 +#: core/models.py:1257 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: core/models.py:1279 +#: core/models.py:1274 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: core/models.py:1301 core/models.py:1326 core/models.py:1334 +#: core/models.py:1296 core/models.py:1321 core/models.py:1329 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: core/models.py:1322 +#: core/models.py:1317 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时,{name} 不存在!" -#: core/models.py:1354 +#: core/models.py:1349 msgid "promocode does not exist" msgstr "促销代码不存在" -#: core/models.py:1360 +#: core/models.py:1355 msgid "you can only buy physical products with shipping address specified" msgstr "您只能购买指定送货地址的实物产品!" -#: core/models.py:1379 +#: core/models.py:1374 msgid "address does not exist" msgstr "地址不存在" -#: core/models.py:1400 core/models.py:1469 +#: core/models.py:1395 core/models.py:1464 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: core/models.py:1403 core/models.py:1465 +#: core/models.py:1398 core/models.py:1460 msgid "invalid force value" msgstr "力值无效" -#: core/models.py:1409 core/models.py:1472 +#: core/models.py:1404 core/models.py:1467 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: core/models.py:1428 +#: core/models.py:1423 msgid "you cannot buy an order without a user" msgstr "没有用户就无法购买订单!" -#: core/models.py:1442 +#: core/models.py:1437 msgid "a user without a balance cannot buy with balance" msgstr "没有余额的用户不能使用余额购买!" -#: core/models.py:1447 +#: core/models.py:1442 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: core/models.py:1481 +#: core/models.py:1476 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: core/models.py:1490 +#: core/models.py:1485 #, python-brace-format msgid "" "invalid payment method: {payment_method} from {available_payment_methods}" msgstr "付款方式无效:来自 {available_payment_methods} 的 {payment_method} !" -#: core/models.py:1599 +#: core/models.py:1594 msgid "" "Represents products associated with orders and their attributes. The " "OrderProduct model maintains information about a product that is part of an " @@ -2148,108 +2156,108 @@ msgstr "" "模型维护订单中产品的相关信息,包括购买价格、数量、产品属性和状态等详细信息。它为用户和管理员管理通知,并处理返回产品余额或添加反馈等操作。该模型还提供支持业务逻辑的方法和属性,如计算总价或为数字产品生成下载" " URL。该模型与订单和产品模型集成,并存储对它们的引用。" -#: core/models.py:1614 +#: core/models.py:1609 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: core/models.py:1615 +#: core/models.py:1610 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: core/models.py:1620 +#: core/models.py:1615 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: core/models.py:1621 +#: core/models.py:1616 msgid "internal comments" msgstr "内部意见" -#: core/models.py:1627 +#: core/models.py:1622 msgid "user notifications" msgstr "用户通知" -#: core/models.py:1632 +#: core/models.py:1627 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: core/models.py:1633 +#: core/models.py:1628 msgid "ordered product attributes" msgstr "有序的产品属性" -#: core/models.py:1638 +#: core/models.py:1633 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: core/models.py:1639 +#: core/models.py:1634 msgid "parent order" msgstr "父顺序" -#: core/models.py:1648 +#: core/models.py:1643 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: core/models.py:1655 +#: core/models.py:1650 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: core/models.py:1656 +#: core/models.py:1651 msgid "product quantity" msgstr "产品数量" -#: core/models.py:1663 +#: core/models.py:1658 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: core/models.py:1664 +#: core/models.py:1659 msgid "product line status" msgstr "产品系列状态" -#: core/models.py:1727 +#: core/models.py:1724 msgid "order product must have an order" msgstr "订单产品必须有相关的订单!" -#: core/models.py:1729 +#: core/models.py:1726 #, python-brace-format msgid "wrong action specified for feedback: {action}" msgstr "为反馈指定了错误的操作:{action}!" -#: core/models.py:1743 +#: core/models.py:1740 msgid "you cannot feedback an order which is not received" msgstr "您不能反馈未收到的订单" -#: core/models.py:1749 +#: core/models.py:1746 msgid "name" msgstr "名称" -#: core/models.py:1750 +#: core/models.py:1747 msgid "URL of the integration" msgstr "集成的 URL" -#: core/models.py:1751 +#: core/models.py:1748 msgid "authentication credentials" msgstr "认证证书" -#: core/models.py:1773 +#: core/models.py:1770 msgid "you can only have one default CRM provider" msgstr "只能有一个默认 CRM 提供商" -#: core/models.py:1783 +#: core/models.py:1780 msgid "CRM" msgstr "客户关系管理" -#: core/models.py:1784 +#: core/models.py:1781 msgid "CRMs" msgstr "客户关系管理" -#: core/models.py:1796 +#: core/models.py:1793 msgid "order CRM link" msgstr "订单的客户关系管理链接" -#: core/models.py:1797 +#: core/models.py:1794 msgid "orders CRM links" msgstr "订单的客户关系管理链接" -#: core/models.py:1802 +#: core/models.py:1799 msgid "" "Represents the downloading functionality for digital assets associated with " "orders. The DigitalAssetDownload class provides the ability to manage and " @@ -2262,15 +2270,15 @@ msgstr "" "类提供了管理和访问与订单产品相关的下载的功能。该类维护相关订单产品的信息、下载次数以及资产是否公开可见。当相关订单处于完成状态时,该类包含一个生成用于下载资产的" " URL 的方法。" -#: core/models.py:1816 +#: core/models.py:1813 msgid "download" msgstr "下载" -#: core/models.py:1817 +#: core/models.py:1814 msgid "downloads" msgstr "下载" -#: core/models.py:1831 +#: core/models.py:1828 msgid "" "Manages user feedback for products. This class is designed to capture and " "store user feedback for specific products that they have purchased. It " @@ -2280,60 +2288,52 @@ msgid "" msgstr "" "管理产品的用户反馈。该类用于捕获和存储用户对其购买的特定产品的反馈。它包含用于存储用户评论的属性、订单中相关产品的引用以及用户指定的评分。该类使用数据库字段对反馈数据进行有效建模和管理。" -#: core/models.py:1843 +#: core/models.py:1840 msgid "user-provided comments about their experience with the product" msgstr "用户提供的产品使用体验评论" -#: core/models.py:1844 +#: core/models.py:1841 msgid "feedback comments" msgstr "反馈意见" -#: core/models.py:1851 +#: core/models.py:1848 msgid "" "references the specific product in an order that this feedback is about" msgstr "引用该反馈意见涉及的订单中的具体产品" -#: core/models.py:1852 +#: core/models.py:1849 msgid "related order product" msgstr "相关订购产品" -#: core/models.py:1857 +#: core/models.py:1854 msgid "user-assigned rating for the product" msgstr "用户对产品的评分" -#: core/models.py:1858 +#: core/models.py:1855 msgid "product rating" msgstr "产品评级" -#: core/serializers/utility.py:87 +#: core/serializers/utility.py:89 msgid "" "you must provide a comment, rating, and order product uuid to add feedback." msgstr "您必须提供评论、评级和订单产品 uuid 才能添加反馈。" -#: core/signals.py:65 +#: core/signals.py:73 msgid "error during promocode creation: {e!s}" msgstr "创建促销代码时出错:{e!s}" -#: core/sitemaps.py:17 +#: core/sitemaps.py:25 msgid "Home" msgstr "首页" -#: core/sitemaps.py:22 +#: core/sitemaps.py:30 msgid "Contact Us" msgstr "联系我们" -#: core/sitemaps.py:27 +#: core/sitemaps.py:35 msgid "About Us" msgstr "关于我们" -#: core/sitemaps.py:32 -msgid "Payment Information" -msgstr "付款信息" - -#: core/sitemaps.py:41 -msgid "Delivery" -msgstr "送货" - #: core/templates/digital_order_created_email.html:7 #: core/templates/digital_order_created_email.html:100 #: core/templates/digital_order_delivered_email.html:6 @@ -2498,11 +2498,11 @@ msgstr "" "版权所有\n" " 保留所有权利" -#: core/utils/caching.py:48 +#: core/utils/caching.py:44 msgid "both data and timeout are required" msgstr "需要数据和超时" -#: core/utils/caching.py:50 +#: core/utils/caching.py:46 msgid "invalid timeout value, it must be between 0 and 216000 seconds" msgstr "超时值无效,必须介于 0 和 216000 秒之间" @@ -2534,7 +2534,7 @@ msgstr "您没有执行此操作的权限。" msgid "NOMINATIM_URL must be configured." msgstr "必须配置 NOMINATIM_URL 参数!" -#: core/validators.py:14 +#: core/validators.py:16 #, python-brace-format msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!" @@ -2585,15 +2585,23 @@ msgstr "处理全局搜索查询。" msgid "Handles the logic of buying as a business without registration." msgstr "处理未注册企业的购买逻辑。" -#: core/views.py:312 +#: core/views.py:309 +msgid "order_product_uuid is required" +msgstr "order_product_uuid 为必填项" + +#: core/views.py:315 msgid "you can only download the digital asset once" msgstr "您只能下载一次数字资产" -#: core/views.py:315 +#: core/views.py:318 msgid "the order must be paid before downloading the digital asset" msgstr "在下载数字资产前必须支付订单费用" -#: core/views.py:353 +#: core/views.py:324 +msgid "the order product does not have a product" +msgstr "订单产品没有产品" + +#: core/views.py:359 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." @@ -2601,11 +2609,11 @@ msgstr "" "处理与订单相关的数字资产的下载。\n" "此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" -#: core/views.py:365 +#: core/views.py:371 msgid "favicon not found" msgstr "未找到 favicon" -#: core/views.py:370 +#: core/views.py:376 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." @@ -2613,7 +2621,7 @@ msgstr "" "处理网站的 favicon 请求。\n" "该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" -#: core/views.py:382 +#: core/views.py:388 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. " @@ -2622,7 +2630,11 @@ msgstr "" "将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " "`redirect` 函数来处理 HTTP 重定向。" -#: core/viewsets.py:128 +#: core/views.py:401 +msgid "Returns current version of the eVibes. " +msgstr "返回 eVibes 的当前版本。" + +#: core/viewsets.py:130 msgid "" "Defines a viewset for managing Evibes-related operations. The EvibesViewSet " "class inherits from ModelViewSet and provides functionality for handling " @@ -2633,7 +2645,7 @@ msgstr "" "定义用于管理 Evibes 相关操作的视图集。EvibesViewSet 类继承于 ModelViewSet,提供了处理 Evibes " "实体上的操作和运行的功能。它包括支持基于当前操作的动态序列化类、可定制的权限和渲染格式。" -#: core/viewsets.py:147 +#: core/viewsets.py:150 msgid "" "Represents a viewset for managing AttributeGroup objects. Handles operations" " related to AttributeGroup, including filtering, serialization, and " @@ -2644,7 +2656,7 @@ msgstr "" "代表用于管理属性组对象的视图集。处理与 AttributeGroup 相关的操作,包括过滤、序列化和检索数据。该类是应用程序 API 层的一部分,为处理" " AttributeGroup 数据的请求和响应提供了标准化方法。" -#: core/viewsets.py:166 +#: core/viewsets.py:169 msgid "" "Handles operations related to Attribute objects within the application. " "Provides a set of API endpoints to interact with Attribute data. This class " @@ -2656,7 +2668,7 @@ msgstr "" "在应用程序中处理与属性对象相关的操作。提供一组 API " "端点,用于与属性数据交互。该类管理属性对象的查询、过滤和序列化,允许对返回的数据进行动态控制,例如根据请求按特定字段进行过滤或检索详细信息与简化信息。" -#: core/viewsets.py:185 +#: core/viewsets.py:188 msgid "" "A viewset for managing AttributeValue objects. This viewset provides " "functionality for listing, retrieving, creating, updating, and deleting " @@ -2667,7 +2679,7 @@ msgstr "" "用于管理 AttributeValue 对象的视图集。该视图集提供了用于列出、检索、创建、更新和删除 AttributeValue 对象的功能。它与 " "Django REST 框架的视图集机制集成,并为不同的操作使用适当的序列化器。过滤功能通过 DjangoFilterBackend 提供。" -#: core/viewsets.py:204 +#: core/viewsets.py:207 msgid "" "Manages views for Category-related operations. The CategoryViewSet class is " "responsible for handling operations related to the Category model in the " @@ -2678,7 +2690,7 @@ msgstr "" "管理类别相关操作的视图。CategoryViewSet " "类负责处理系统中与类别模型相关的操作。它支持类别数据的检索、过滤和序列化。视图集还强制执行权限,确保只有授权用户才能访问特定数据。" -#: core/viewsets.py:315 +#: core/viewsets.py:318 msgid "" "Represents a viewset for managing Brand instances. This class provides " "functionality for querying, filtering, and serializing Brand objects. It " @@ -2688,7 +2700,7 @@ msgstr "" "代表用于管理品牌实例的视图集。该类提供了查询、过滤和序列化品牌对象的功能。它使用 Django 的 ViewSet 框架来简化品牌对象 API " "端点的实现。" -#: core/viewsets.py:427 +#: core/viewsets.py:430 msgid "" "Manages operations related to the `Product` model in the system. This class " "provides a viewset for managing products, including their filtering, " @@ -2702,7 +2714,7 @@ msgstr "" "`EvibesViewSet` 扩展而来,使用通用功能,并与 Django REST 框架集成,用于 RESTful API " "操作。包括检索产品详细信息、应用权限和访问产品相关反馈的方法。" -#: core/viewsets.py:547 +#: core/viewsets.py:559 msgid "" "Represents a viewset for managing Vendor objects. This viewset allows " "fetching, filtering, and serializing Vendor data. It defines the queryset, " @@ -2713,7 +2725,7 @@ msgstr "" "代表用于管理供应商对象的视图集。该视图集允许获取、过滤和序列化 Vendor " "数据。它定义了用于处理不同操作的查询集、过滤器配置和序列化器类。该类的目的是通过 Django REST 框架提供对 Vendor 相关资源的简化访问。" -#: core/viewsets.py:567 +#: core/viewsets.py:579 msgid "" "Representation of a view set handling Feedback objects. This class manages " "operations related to Feedback objects, including listing, filtering, and " @@ -2725,7 +2737,7 @@ msgstr "" "处理反馈对象的视图集的表示。该类管理与反馈对象相关的操作,包括列出、筛选和检索详细信息。该视图集的目的是为不同的操作提供不同的序列化器,并对可访问的反馈对象实施基于权限的处理。它扩展了基本的" " `EvibesViewSet` 并使用 Django 的过滤系统来查询数据。" -#: core/viewsets.py:594 +#: core/viewsets.py:606 msgid "" "ViewSet for managing orders and related operations. This class provides " "functionality to retrieve, modify, and manage order objects. It includes " @@ -2739,7 +2751,7 @@ msgstr "" "ViewSet。该类提供了检索、修改和管理订单对象的功能。它包括用于处理订单操作的各种端点,如添加或删除产品、为注册用户和未注册用户执行购买操作,以及检索当前已验证用户的待处理订单。ViewSet" " 根据正在执行的特定操作使用多个序列化器,并在与订单数据交互时执行相应的权限。" -#: core/viewsets.py:784 +#: core/viewsets.py:804 msgid "" "Provides a viewset for managing OrderProduct entities. This viewset enables " "CRUD operations and custom actions specific to the OrderProduct model. It " @@ -2751,25 +2763,25 @@ msgstr "" "模型的自定义操作。它包括过滤、权限检查和根据请求的操作切换序列化器。此外,它还提供了一个详细的操作,用于处理有关 OrderProduct " "实例的反馈信息" -#: core/viewsets.py:835 +#: core/viewsets.py:857 msgid "Manages operations related to Product images in the application. " msgstr "管理应用程序中与产品图像相关的操作。" -#: core/viewsets.py:847 +#: core/viewsets.py:869 msgid "" "Manages the retrieval and handling of PromoCode instances through various " "API actions." msgstr "通过各种 API 操作管理 PromoCode 实例的检索和处理。" -#: core/viewsets.py:868 +#: core/viewsets.py:890 msgid "Represents a view set for managing promotions. " msgstr "代表用于管理促销活动的视图集。" -#: core/viewsets.py:880 +#: core/viewsets.py:902 msgid "Handles operations related to Stock data in the system." msgstr "处理系统中与库存数据有关的操作。" -#: core/viewsets.py:894 +#: core/viewsets.py:916 msgid "" "ViewSet for managing Wishlist operations. The WishlistViewSet provides " "endpoints for interacting with a user's wish list, allowing for the " @@ -2782,7 +2794,7 @@ msgstr "" "用于管理愿望清单操作的 ViewSet。WishlistViewSet 提供了与用户愿望清单交互的端点,允许检索、修改和定制愿望清单中的产品。该 " "ViewSet 支持添加、删除和批量操作愿望清单产品等功能。此外,还集成了权限检查功能,以确保用户只能管理自己的愿望清单,除非获得明确的权限。" -#: core/viewsets.py:1009 +#: core/viewsets.py:1031 msgid "" "This class provides viewset functionality for managing `Address` objects. " "The AddressViewSet class enables CRUD operations, filtering, and custom " @@ -2793,12 +2805,12 @@ msgstr "" "该类为管理 \"地址 \"对象提供了视图集功能。AddressViewSet 类支持与地址实体相关的 CRUD 操作、过滤和自定义操作。它包括针对不同 " "HTTP 方法的专门行为、序列化器重载以及基于请求上下文的权限处理。" -#: core/viewsets.py:1076 +#: core/viewsets.py:1098 #, python-brace-format msgid "Geocoding error: {e}" msgstr "地理编码错误:{e}" -#: core/viewsets.py:1083 +#: core/viewsets.py:1105 msgid "" "Handles operations related to Product Tags within the application. This " "class provides functionality for retrieving, filtering, and serializing " diff --git a/evibes/asgi.py b/evibes/asgi.py index 7564b7dd..b7354e6f 100644 --- a/evibes/asgi.py +++ b/evibes/asgi.py @@ -1,16 +1,31 @@ """ -ASGI config for the eVibes project. +ASGI config for the eVibes project with Django Channels. -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/ +Exposes the ASGI callable as a module-level variable named ``application``. """ import os +from contextlib import suppress +from typing import List +import django +from channels.routing import ProtocolTypeRouter, URLRouter from django.core.asgi import get_asgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "evibes.settings") +django.setup() -application = get_asgi_application() +from vibes_auth.messaging.auth import JWTAuthMiddlewareStack # noqa: E402 + +http_application = get_asgi_application() + +websocket_urlpatterns: List = [] +with suppress(ModuleNotFoundError): + from vibes_auth.messaging.routing import websocket_urlpatterns + +application = ProtocolTypeRouter( + { + "http": http_application, + "websocket": JWTAuthMiddlewareStack(URLRouter(websocket_urlpatterns)), + } +) diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.mo b/evibes/locale/ar_AR/LC_MESSAGES/django.mo index ffaeaeec588a7fb71d080f8ffd8b85bd13b46403..48d6ffc1b3e81dc67697cbb09c4543aaf8f0b38e 100644 GIT binary patch delta 1400 zcmb``J4_To7{Kx2Au7t#C+|@dP=i`1YP2v0jSUt?6AHx~usjTRi|i7D%>~0N*r5~_ zHX219@x%)TIui>LH5v=dY)nin=qv~tVng)*9fLL&7EbQ=x8Ka&ecygF_c1?K9Q~Y| zI-(c{co*{alaxA%ZS>O##!rY+)n%nD{u+-U_q)<8F(7y^A|7&uVEhEu@<$1m1GV)hR?9*QEwT;)P;6}DU4w`gI+FckAr_>}x&%0eZ z9Ex=7#!$DXyBzKLZil18j^~A%9ZxrPxM3ZNxRLI#+v({}&*|{gzkR9GZ*d}iYeUF) z8toTrLalA9Kk2snt!_lc-=scDD!%MF`jXS;Gr&6vL0${^}FM4+Ehx^ z#7s<^(V*8n42H08H5dcKQ zF{Xz8Oil&^!63^_DKq=GR2ND7UvdS5W+J#Hnc_w1CsGbm;_s3)i!&_sm@zHcq#`qE NrsQ!e%@bC~)h~nKIh+6h delta 920 zcmXxiIV?m$9LMq5eXMgG>%Mk9tfN6g(78%05(SB#Myy6uHW8(*M1@A8(U2?(LZTE= zh(sffPN5?bg@o^KjDO62X68L_{_~$Xh~C$xo+4SBhG?hN(`Ew3^x$@oA0p`)Q-X`m zRjg#Zf%>0)Y{5GW;}`1vP?j;JScNs%fqFiS6*z&smol?-%9&WkVoYNp?qELdBY)$Ia;w5^?b~^ zhFb6pb!Xn(IG1zNd>?AzIaDG`Zk)zy##=arM}^d1I}YdU#6gu<&AP>7UHf+D6d&MVgu%^9`oSqHciIC1;JJ9*XY1-|7C{vZU#Z3gUji$?{ zi>hd+)!N?QB~|%#+c_zF$r@3iO)9iWRmAwdKQi8!7|&dKgMmyk`y`MV%{lZkR|UP^ EFN5z!0{{R3 diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.po b/evibes/locale/ar_AR/LC_MESSAGES/django.po index aa84c80f..447bab08 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "كيان لتخزين بيانات التحليلات" msgid "Save responses from vendors' APIs" msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "استخدم وظيفة تيليجرام-بوت" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين المجهولين" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين الموثقين" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "الخيارات العامة" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "خيارات البريد الإلكتروني" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "خيارات بوابة الدفع" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "خيارات الميزات" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "خيارات تحسين محركات البحث" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "خيارات التصحيح" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo index 90fc4e795c9fb313396f60454561378bef49847c..cc830b29a0b16ecc427c92f4bfb51dc3c9021eb2 100644 GIT binary patch delta 1299 zcma*mPe>F|9Ki9n>t>l-nwDvry|Vn1bcvv-i2e`+VgwZ!1TpQ7I=DN}c4n3BvPg#x z9Xx~wi4Fw?Q6aQMb|{2Z5B-4-1yNKGc#OnLU4p*9-4|3Rf9&jMezP<4-tYI`zHWHZ zl>b~8n@~hIM+-+7QR)D`it5xtgI)L)H({JMN#{Cn2OhI} zC>5dd2>o1i{7o_t|2lOD@fE(!kj7e+9H-0W{vVqP9ZYEI6dng+Yx_;;-oX}0$ z2YVeaReq%z4n5q3x#!*pBd6x3)G{75BeOT=CSAYy?7wG^ cBr|T{XjAB^ibh*c8F_EW9GKxy;@?@T-+QRdPyhe` delta 920 zcmXxjKP*F06vy$~>OZCal$N3>MI{o6q)P`0Wvy5w#9$MHq!NQznqVY`MkfZwN-T{^ z3{tZg#6~b0MMT*6{^~mE?dRRs`@D0`y)GiR;oNi3bzq1Dql>ZVFeZtIPQHk2jWJEQ zX5GRt^E~RABF6C^1NemI=sVLd_raXYUiJJ z{(~{@2RwfXj-r=&3e}lO>pZHPSyVx{EYj}}sKnlJkoOz6kM`gQDv>!<%U0}s8&y#O z)zUN6R#oi$3EP>!*}0GGwXVZDf;7jBqn=Bn5?I2VTE5PO9@xQQEMNy#uoE9~0KcqJ z_C=MXQ7vCUC9sL=SRPqwj**W!wevEnunLahgP;DZbpiS=L#Rrl)+EwF)5qv%C^%o$ zbD%9yD1rZAd9^aVT%FXpQbG!Cfr@1Js-ZLC(f+F?dbuhbWc-IJQuT3rL;ny%3>`Lg zO_5-zQwp^>%20*uMD>vMqC!O})D3mc#A30jncmDy>AGgZQOdf@j?%RE-dWoB`<=h< Cazu^* diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.po b/evibes/locale/cs_CZ/LC_MESSAGES/django.po index ab21c4cf..0a518a96 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Subjekt pro ukládání analytických dat" msgid "Save responses from vendors' APIs" msgstr "Ukládání odpovědí z rozhraní API dodavatelů" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Použití funkce Telegram-bot" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Obecné možnosti" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Možnosti e-mailu" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Možnosti platební brány" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Možnosti funkcí" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Možnosti SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Možnosti ladění" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.mo b/evibes/locale/da_DK/LC_MESSAGES/django.mo index 2d7404649db01f3f78c7cb1302b9ebd15c2ff8c2..fa4c1d366c48d3255b62bba2b78b65bfc70506a5 100644 GIT binary patch delta 1302 zcma*mPe>L)7{~GPPnv0IT9$vRG5=JGbcqV;kV0SwJ48i?C|2L`?M3(9x7~e}_w>@K zLl8)KDCiPMgh2->tW)8kusQ}&6m_tx;wgxr?@w2%n-9)>c6Q(0dFGjMrg5^V__e-# z$`C!YR$5$Q%n5u~N=M9<8B>SP6Bn?N@n<}UE7*Z8<;HBqQ>fpc#qD?%oA7$_{1)zH zd>8p$(LCW|2RB|~Eq=fnT*NK7g8Z4^bVsmslQGBf7;2&%HsFoKDcr{R5$?k|+=U;L z=gYX4ae0L-8q>~&GU~?`yoB`_V>RByD!hYQ;r(PhlZ>BY8~5i?2`^$LE~6^-GqIMN znz#!uQ{~gx!2IUH=Cu_(LnX3+D(yFH$0}ym3VTs2?!!HJE-{C@8Q(^g`e8DDg{tf) zR0Wn$3#%kcCE83^RB1c8IEvk<(t4=U-9x?b0<|^oQG5C&dA^ibOPQ3wVeG&GRN_81 z<0PuGk5RvSgW96+)zqJFm}PEgWxtRlO$`S?6E@<0>_VN1GjuBLMWi_9N@5x<;~Y|1 zL&aC$)3+1{)-c_uifB$%q)z+49{QlN*Tf2~l*4TfX+UTT6sm}VbF^9|{iA3#Jv4<@ zt{|7y^P_96UWse}b%s<0RleyYokC?&XkR;NmiBMxJm_q+(R8S~Xsxq;*403TM$eP)=<SL+PdD^ WRMqQ}wtl|)U#7ieI=Y^zi_ITe2*NG^ delta 920 zcmXxjODM!q6vy#1PmK3?j`xh$SShiw^V-Q{p(uMBYAlqErr21pkdzo3%dwm&7RpMI z1d9I?erm=KkmU-+Rva+ln1kr=Oz19V3#A2F9$AxBKd+kz!xUj-wN~1TCo?kU>cR_JT~Hrb02G& zpQ1{7=jI=%3WhkfGOt4=)Pt(v2vQuIKvihU{l0{0m3*Bq>ea4Wkab?6Hhjl64Dd7^ zG>LUMiuE{$TDOL3MF#oU5f>$Lf;_@5QTyFu0$(E3U%d`eca^XlNycK%1X4k7u{Kul zet8d73lz%eKUnTnP@Aa&s)|~u&^}6%?s=hiBCP)Ft=H!5j1I\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "En enhed til lagring af analysedata" msgid "Save responses from vendors' APIs" msgstr "Gem svar fra leverandørers API'er" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Brug Telegram-bot-funktionalitet" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "Hvor mange dage vi gemmer beskeder fra anonyme brugere" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "Hvor mange dage vi gemmer beskeder fra godkendte brugere" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Generelle indstillinger" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Indstillinger for e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Muligheder for betalingsgateway" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Funktioner Indstillinger" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO-muligheder" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Indstillinger for fejlfinding" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.mo b/evibes/locale/de_DE/LC_MESSAGES/django.mo index afe01b4b1f5341394db65f0c82c68e9592448f83..1de3afd20ee6029f9727b6541f34f3d4e87a8652 100644 GIT binary patch delta 1316 zcma*mO-K}B9LMoz)wD88doj(jr!;$GFA)?}5JKTaPe}zqP3yBcX?YxdShDgMd}-DC;x(bZ~=R$9qfOFDtHc?a30mE->K`^ zsR#GrIl6oTTY0{@zp~b%3T`2Pk9r+HFpC>`x(ez?t#~-i^JvLSsLtI*T|a|r{cBWb zKcPDG6V+K&sX|+r%G&5)I)*(sfFAbZ45~99P&b@Iwe}aPwT-k#@3s#+@Hp$IfFsXn7s>M^O*HI6=g>=@? z@oFKumtuDfvk%n~>aTtit$P29LAR@`Rx1@MfREekRYIt8g2bx~mBamQh{%yO&^RDeHZDT{VrI#QB!)S i%HXQ+ncYjp_J>LKWHGqBSnR8ZiJfrKqzgt|VEzG7>B%er delta 920 zcmXxjO(;ZB7{>84V+@AD7~h|F7>p#Plx*ZHyOE`0Z8bHru}~vBMUkwSjg*>|y0Nez z3mdYKERB+~RZ=$M|6FI@ocYbU?!D)|&$;6^oz`daHGzFYB^a%Y1)nj)cztY^N5x+aHle8ez*qs|WojEP_aHeny?|C3mUbI5rav&5HL4yY^uL}a?t_C8gC>?78Nzhxo z3st;dUOL(Wl^QM-r+bZPaV4o#)PPFsXmNJWD>WX}{_CyRqTLKVU7_^kEeu7b(hs7S zp+>b0ssuw@q2m2BZ44#Hj(7<s}X)``mQ#xzC+0$@|@0 H=+*ZJ4$(!O diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.po b/evibes/locale/de_DE/LC_MESSAGES/django.po index a6e3ccb7..62babe87 100644 --- a/evibes/locale/de_DE/LC_MESSAGES/django.po +++ b/evibes/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,40 @@ msgstr "Eine Einheit zur Speicherung von Analysedaten" msgid "Save responses from vendors' APIs" msgstr "Speichern von Antworten aus den APIs von Anbietern" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Telegram-Bot-Funktionalität verwenden" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "Wie viele Tage wir Nachrichten von anonymen Nutzern speichern" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "" +"Wie viele Tage wir Nachrichten von authentifizierten Benutzern speichern" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Allgemeine Optionen" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-Mail-Optionen" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Zahlungs-Gateway-Optionen" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Merkmale Optionen" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO-Optionen" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Debugging-Optionen" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.mo b/evibes/locale/en_GB/LC_MESSAGES/django.mo index f3bbb6fa8e550e24bfe3aac7d8271ef8f5664ba1..889e5f71f6fd12dfa2308aeef38b963a0d777da1 100644 GIT binary patch literal 3099 zcmeH|OKclO7{`YaUg1$Fj{@N_p`lF(8=OExa0sfMI1k|$_By}`jqQoE)H}26%qFoA z2Tm2@gsL7mL~!6zf#8H_ParsfdZhv(AtAM#I8+sf9zgK_)*B~{C~!ka9eMWWZ)SGp z`~LII?2r5UPB4^F)CW-QHH=MzXZGNMa_U;fZU;{%{06)S_7C7Nco7@|2l^Ph6+8mc z_#$`*_zHL*_*&BcHh4GecR?EW33wOy1-KXd7Q6*K5B7r>LHyY7csvE}xsI_Z@M)0V z55POYHxr%!Z-adjd>A|h?gzh1`Y(VF!S1`h%L5?!lLZIBm%x3X1#bqAfj5E2L5goP zu|G`gPr*U7e+81i=fNAm3n1xqDdAo;(z*x17ol+uB>y*W?DAuf#(xfyu4lm^@DGsI z9fA`yegY(2XF<}n22#HUDULTl8h0EdT|WRx*V7>B`ZY*?o&`zQpFq;}XOMIqKqm)X zkaUd_z6Fx5n;_}>5lFh8N&3%$6yK$U`yn3rGYOKed60Bn1@U9A_iYpCNqTR7x!*mB_C$hYf ztGawnHw?=PBY9K%!c$xcU$Qw_k6JBSpcGh7E5qhIBkFC*>k%A?RD)VY8}6_iUTgQp z%*&zP z=&(f%7Z>$9_aO}8=@`B)V@V|UA)RPprIk?oTqvzNzK#r!j10}cd?|wNkh*~gn#qd= ziZPy2$AYjTWZJz&JKKU#zbYG+l>(_UOTEn{vuZ;rZ9xRQsC`cf>-lkit&(SD(TR6* z0c)>|PEW6`_EyrqbL>`|FE%_sLeL0U+1^yWZcqJPx7A0bV&zq>Bv+ANm*MX4%57nh zd;X5Zspd*O7pnzq(5g0;#s30f%(@PniKWA&oi-xQv8q@@mPivIy|(si4Jn~RbBOdX ztcoO;5FNo(qadIuYDm;-HP44rGe!OQm+z0yye!Q~-0bG7f7vYCvK0#7scX9{bCFH7 zN6u2ySw?msqtiUMyp+vV`IBR*u~dIW(xOhmw7jO1jatTWb(;5=OHM_u;m~R2%wa>) zd?Gb**hx(~dy;f9XAxpKsg;^@`X}`qh@Qx(lUQ`wp4U8v+j}k zS|x{;rOMcBsqh?LQ>_R&?6^|+X`aV5QOhjk{&74!D=Zaq+p&xzgxUC)>kZM{E5xz%VSZDq2~2t6DF(+s10mjJ?oo8I$>^HV*%b{5T8*yez)Uq zJO0He_lx}54R&LIaX%`VLF*(=kY)Exca2K$4wc{=D#0&Qf)1x498-u9EJG#JgK2d}=_tY}RD|=W2-i{1GpGp9 zt&gY;d}2KYSw#u9p%Uyv9+_d(ff9B+ZO5~y1eZhPPv7itQG^-miS-Og(8OphG!@@3 z@6`GLl{WleT3j2};@Xf>(FRmXL}~K&ywZXEdjI;?Yw\n" "Language-Team: LANGUAGE \n" @@ -125,27 +125,39 @@ msgstr "An entity for storing analytics data" msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Use Telegram-bot functionality" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "How many days we store messages from anonymous users" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "How many days we store messages from authenticated users" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "General Options" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Payment Gateway Options" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO Options" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Debugging Options" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.mo b/evibes/locale/en_US/LC_MESSAGES/django.mo index 5a50373803184e52997dde57aae90d72d0cd6642..46d8740f12af9572d1c639c835e302cb0f1167e5 100644 GIT binary patch literal 3104 zcmeH|U1(fI6vwAEeytzX`faODY;6+K+^RWkaYbOBwaZ= zId~K#U0;g%CP=!T07=(RK+^Tcxc@9j@m+|y8{&~a(;(@31SDNO5I^=Z9$1pS0aAQ# z$My%Y{SipIegR@ib{ZsI&&K>M<{u!fyA8oXRtCA*gQzq&mHj=ihe6VV<|4mIqke(Z zk=CRW719@J%|^*UAswiY|5T7dkp^@`NRu&CDtmf}bcS0|q1ef9@{!`a8RM5k-rrs)mJ zPG)%}SFQ0`-83vKjN~ot30H9?JjrHdBW$;6fs$`stqhxWjc9ZvZ-j6lR849X9k|1C zc&#%Sms@YH2-TK65LQMp9YaiWQrHkt4TjAHT3M-D7p*!kl?=q@T=RkOSB@<9d|as2 z%Df!t^)6e`aB)GeaSy^Ep043*GLl4c57LP?R$30U$A!|W>*>(&(8$32%a=mv4yl`n zpcTJZpctbmbtDKYLZ(Z%Xlt7v=oe(uvXU=VCO_C*GOIR_(iVizi`sLQu&x*N*DH&x zEV|K7&SUL0(H-d3Z*Rx#TgUd>JhAS2A%aH0$_}O)bi3;Bx~)DY6)Uf3CAkW{h72wZ zuiOz9x#w+3oNBH#aIspz2CZmgS@h2r#;oa}6QAeUytBZUjnJ(%_zJ7lqeN>v!sJXUS{mW+Ak?lZuPD9&E zG8frId*tL>&JwZ%8J*&}rF=G5<&TXg$CHVQq(z;AX}c{a8@7#8((m0F43yIWCZ8`=IBK?DEG_XTXG+Cd zW~O#{u3pKZC0`kzDHWc=YpNY0hn<=fUWzZ`ny6>ybN@I#g$u$7O`?!5AxU5}T)+WrI|YA6-} delta 920 zcmXxjJ1j#{9LMp~(u;aO>iuZzRhCX7kr=!NkyM05A`upYkcx$=iNuCQOb9VF(uAd9 zFj$OY5Eg?P#bgjkO?-d1$3M>foOAEdbI$L!r}ejiM5ZeLz)%rdGi}aeOdlS3xlr*u zV=8dXx`nlj_fh|o!VY}GQp}>}JNd>`VjVVM59;{{25<_QmoQ6oYPhk1<+zI_c#M8b zA%EtIi$3@UtMT6YhGmSuunoOF7R4}X-T<~@%({Zwzz#OCzB!{)#f@7m#z!o|SJaN* z?fBb{e=)@UQYW{;C>AgtKqWJ5okgV?M{WFpNiu_)_lXhKH%?(L!YFFN8Pvo@RD|oO z2)FI?6VwSVQ1k9k2|l9|{6Ho6gG$ihG=yU+F^ILOWco3o&IBDrIFE{O6&2wg>Uk0s z;f?hLwSg=)VHv9^!Cq8?gUBN@jylk^9WU7NGAhAMKl#%)hg=k4(t2sVMiMk(T02d} z_sc!CK0u`n|CbimhPAjhq*Sy4l@d{!ygj#cAV=?C-+C?HN$aBhS3Mn_uEXBY52Bl< zq!hC%LThw;xrkfn>s67wn@|u{N>jyo+;?w6q0s1LFgBS^6%KjQao@EkJywwPrf2=< Fo\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "An entity for storing analytics data" msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Use Telegram-bot functionality" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "How many days we store messages from anonymous users" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "How many days we store messages from authenticated users" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "General Options" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Payment Gateway Options" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO Options" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Debugging Options" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.mo b/evibes/locale/es_ES/LC_MESSAGES/django.mo index 57d145b69a733b20535395b398cf8c39b582032f..08d0c981b0b8a96d79f5ea21a2d7640f97998f31 100644 GIT binary patch delta 1315 zcmb8uO>7Kd9LMpeFG}f~da1sssimq#9GbL(5L8^sg~UOkkM6Wqc4lg4Hq8pz2#G`E zBuzNfF>tBog1>?uZ_Fvd?_>nVEf_|Ns9yJJoWtE&rvt zdfL$X=pFQ^!kE4Iwvr2Nw#t|$d=~o}*E9ZvJ-CQlu)W%tdOV1F|2VG3v)GCku?@d;v(`fzqs^cS%?K*fG-}VUAu*U)Wcy4J`Ix!b_qd($SERB= zNohgNt+uU<=|u&gxm3X>?f;)fwM!>ihfqzYm&09}SYu_brV^?t5S3kj6dkxex>}-4 zDL^Horfp%nOZ%@gq;1xrZr#U4P32SDNZ(3#=u4Z*twY*HS7lV@j)GS;T#-K(Ogf(R zb57FcLTA!-!YIhNj^~D<9d|=#EE9N+^#ecW1=-NahHfS_|MsJ7bl&x&)ToWzWciZR)r$W~`>89QBjP-V&3nFJM>yPTWO{bz? zI?3WA8#*@a*-_WG9(U4o&-Fulfq;`PYh`UF#ZBuM3x0}M%zyk^v;CbR8T2CWFc4vKZbFO_34^2wk+hph6RT?w8;gZl8zcsajWh-^ zieqCDg9sbnU%j66{eS-N+qduWyl*!{>lKN|V*joYZIl|ytjDYm_q;ran9r;bRTs(-+5R)iH;h3%;CN3jg2k$wq_@={8}3Krld=HfnP<1zBF6CN7) z97{0ee8PO{A6Spx3?{_}RKG#2!%62dY5^Nq&HQ%2OEC=>n1i>Ng%79|zqtCRtN&nx z_PoH~0=qGj`XDMZBhDFAHe;x9Zs?>1-D4%bV;A#VFlg3^{iqHLsDV~cJK4rC9-?-5 zh1K|qO0A#OhOiE`kpbrfDuZ*#8f+1JFpkRj0VXuz880%0ZTN(`3qgLZft#@fhn!K= z#9P>aN2mc)sH1yEhOjr(k$s^u8|0ylm0~Y;9vw0fGsx6@gh&xx245lY(L+F#C E7u+X9_y7O^ diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.po b/evibes/locale/es_ES/LC_MESSAGES/django.po index bac536da..e7a1a3b1 100644 --- a/evibes/locale/es_ES/LC_MESSAGES/django.po +++ b/evibes/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Una entidad para almacenar datos analíticos" msgid "Save responses from vendors' APIs" msgstr "Guardar las respuestas de las API de los proveedores" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Utilizar la funcionalidad de Telegram-bot" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Opciones generales" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opciones de correo electrónico" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Opciones de pasarela de pago" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Características Opciones" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Opciones SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Opciones de depuración" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index 4feadbd3..8351b9a0 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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -124,27 +124,39 @@ msgstr "" msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.mo b/evibes/locale/fr_FR/LC_MESSAGES/django.mo index 1aca40096aa5adac3a7bd6507b958c05fbd5b9ca..0929ccca951211a5ee956ac49c5f3cfd47e446fe 100644 GIT binary patch delta 1360 zcma*mOGs2v9LMqFqlcxLTKUXQW#uCwD=^3&1VImsqJ)YduFf63GIOuay^~0bp;e1& z6)sw|2}-1e&=lD&FeoabO%MdNGFnEfHbLLt%q=Qf_{VcUbMBpc&j0_PryVnT$wSe@k#7UT*v$aw&OQ!!{%~hs_-D{`zNplFJdE($Iq|f zTIRQq@8!%aAJ%Z=DOTegKf;aNpGPIUfXnbJs#D)% ztGTI-x8eo5d>Cuk-`rVV-0&eP)91JgKVc8nvAZ@tj9TzCs$-+L6?3Qr?x8Avfok~| zY{F8qQis-~I@^OvbU&AzGCj(N0X&80aT*J)rhL8Fi%Q@)sh&X#<-tiL38B$%*i z$DgzbXEL-Ct_`Cgp;_EZ*=WS|BX7uw+(i6h zzvHEfO9o?+7x*Uss{C$A>px6d#LXuu@xV&0Dn;PgIQ)JScNs%h5G*lR^S{mFJX&x%6YJkMYx0cc!YVFME>lI z554#j%ka+mf`yE~unGOyEQ-yjdBfO|;A7 zQ42qycKU@XZ5i3tVh?J^)2Ir@P!(K4CAf-%xPh8?iU}=vOGhPq#8!MoEfnJ05$wWl zoN=z95;#F6c7sab!x^NEbj?HUyc>C?jiNR-js3U~rvA!omk08|d5qdY5~-jy(^_Z> z?pOLAC_#l1$pq8WJJVt+wW_BLD)c@j!|A0%cOt0s*R9v$Z8YsB6V-I;XsU=pKZp*R zDy566=%i`q3htjZ&~zl6O!|^VP@(fys4A*}d7d{p8;Q=Qt^;GfR6P6KmzoOY2U7m< Gi2n~{c|\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,43 @@ msgstr "Une entité pour stocker des données analytiques" msgid "Save responses from vendors' APIs" msgstr "Sauvegarder les réponses des API des fournisseurs" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Utiliser la fonctionnalité Telegram-bot" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Options générales" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Options de courrier électronique" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Options de passerelle de paiement" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Caractéristiques Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Options de référencement" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Options de débogage" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.mo b/evibes/locale/he_IL/LC_MESSAGES/django.mo index 7b018d3906ae07f93d8ad972490f7264cb504a48..7543a797b52ce43bcbf0b9869a9442b8ce0111cb 100644 GIT binary patch delta 1361 zcma*mOGs2v9LMpaPL^f)$V$`f<}1qzqC%ku5fp8VB7=e;CcWB(GuP(cL0!bqDyU7O z6G$p1y~Y+ThR}9Gw5gztaRZ@NLQ9brZGyhPnJX2v@Xy@)x#!%+`Jewe^SE-pI{CFc zlrlsMM-7LUXUtLjn9qrrEik4O-vqwLt+W@g8JDpEt3$?Y#FMD!&tVx}!z#QL+`o@o zXpbV#CCw`?D(INQ68wzCxQOd<8TpxCoDO6D8e`h96*W*FZpJ%-DcnRmjXQA`x8axI z{u0*G4i(CzG4)(1qf=Oom$4i@+<h!w1#+GkKR zj$aUXiphE-Y(~#w;2kLMiwj#waT}W;wikiVd;5}@mJ%&`)Xi`dy zLS#dOD)w^dyZVOqM5)$)B{YD_rvwxlfX!|8s6nU#3YAd7KFV$|{ZX{xG-E}5j_f9; zAlcBqV!5-`AjfPKwW+I)aZ+gg6j~>h%HsGtnrUcnXrpOOwf;4kXhC~k@~qQuMZ>W{ zt1CR{TK%@=dQRN7qPFXXdu-S0jyq8+9CKoWQ77SA3D=IhW_2$myc>4Ri*$xPyDNCH zJsj!HebVXkB2LU?K7^j;)n0OKtHbWKd*b2f{_Bosbtht-x*zV1c!L?I@I*m!!XL5x zQGbGC-0~mzlYYwb(|(Gc7rDL>8pHk+=V^=H3GPm3&wt+Ft=uQ*GX5j(uJ)t#|NrU) rnJ9&6rI1M%4dl1^BP#=2{*eEK+mrrt{}~VHYAh=Wrv0&h=4^fg?06Rm delta 920 zcmXxjODIH99LMo9GmOVz#`|%-hQWwPvJnff1q-rN78Z()8f8Jrl#LAwNm4AZP_vy_ zNXl9kVvDkolm&^D`2McrpF5v>&fK}@|No!k#@Q>0-{qxj8Y0S7&Nc2arUQ4pd=N38 zF(I6_E@Khn4b*QE7{P1I#!uAq{uElmt=F;sz%(v~PVf9`hZw5urXaW$7h`>s%t+A0$chx\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "ישות לאחסון נתוני ניתוח" msgid "Save responses from vendors' APIs" msgstr "שמור תגובות מ-API של ספקים" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "השתמש בפונקציונליות של Telegram-bot" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "כמה ימים אנו שומרים הודעות ממשתמשים אנונימיים" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "כמה ימים אנו שומרים הודעות ממשתמשים מאומתים" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "אפשרויות כלליות" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "אפשרויות דוא\"ל" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "אפשרויות שער תשלום" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "אפשרויות תכונות" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "אפשרויות SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "אפשרויות ניפוי באגים" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index 1ebb926e..d6061bb3 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -124,27 +124,39 @@ msgstr "" msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index 4feadbd3..8351b9a0 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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -124,27 +124,39 @@ msgstr "" msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.mo b/evibes/locale/id_ID/LC_MESSAGES/django.mo index 93b5cec12b267d825709155b25ce46ee10236d2c..8826865c32933d19e284ab6b6c0d1b03487febc1 100644 GIT binary patch delta 1309 zcmb8uPe>GD7{~E<)hyHUPg(xU#x%2}OB4omNGa%I1Qm1$>dhV3L1$*$nN9Yzb*Z46 zVbGyNmWL?lpn-KUFgjGn0wIVXgrJK^haiH!zjZuxtB0BS%saF1`#$e8@6I>QHWfcN zR7@J8m$QvCP8o9q-9FY{Fxx-=D&Iyok+sC3$}v z8)@G|epfWlxY^2sS6GW5u?ClLBd#Ea`OW1ZmaQ}9F!rG)%HkHho;Zn{X+OrDIEUMD zF?qj??X)W@Wzm>UZj{jgw&Hngz!?I%h5Id<@T0hRC)uE%9mrG6&X z@=z0Z;{~dG0_&OIOl?>#)okJ$+{N=n+>O6bEA1c)mGl5=g~w47pFvHWM=j)9(!PsL zv>zacdC5f;evMk#2P`VnFWel$Z`hCRjHZDup*mbeb+~~_WCB&%hp5snU};aF5??_j z)<`EM(3f}`HLi!O$rP)pKXaN}JkUfFsP+`<6FkLEoJS@471i-Oa+n{9+Aw=)*C3TO zRJ@dk#!~2=VjrjW8u^tHuhaKm3k}@GsYDbiHJjV)RfEtbQz$V7`>0d}{ZaHedN~zJ zSfNdQgP2GHyi=t%}vjg?bous`+4>u~E%BoU#bGFU+<%6l>$#C59 zZBTI1wh%evt`o&!&UJh@ifqP>oZ(#PJ2nV|f*MLa ZOiR^ts%J16ew6vhF%u;@+UT$R%^$+H$CLm7 delta 920 zcmXxjF-%iI7{Kvs3q=d46hQ=3TC2iDLc$Khn850&_j0qe5|F7qTd%t(@-Rt+=cgM$`FJ1K?#ilobHc0QM&t*aw z#dldQv|28NGx#|A0=pT%M!#9b3Vy?OJVNK^n?mTob9f$y(D#$rg}0G;_3(h3vpjf) zr|~7W;Q|(L75NJrT>RnB*ooWGeLThZ4_?A-GeNP8&KtvvI2C<}CNPhE#1G5d6nU_T zt+i2$H!RWd3(N*;4ro@9z!cL5uHV=Swkza%Ou^8{>C!#L+(TfSMVyj z!dvLXyXeXup#h(x6f`cHI8S{O5elF_@qGn&Fn1?{BRLX z=tDF?DwqcM0~_ZnP1ZzgCj7tot$S{819`68LYrsGs\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Entitas untuk menyimpan data analitik" msgid "Save responses from vendors' APIs" msgstr "Menyimpan tanggapan dari API vendor" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Menggunakan fungsionalitas Telegram-bot" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "Berapa hari kami menyimpan pesan dari pengguna anonim" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "Berapa hari kami menyimpan pesan dari pengguna yang diautentikasi" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Opsi Umum" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opsi Email" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Opsi Gerbang Pembayaran" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Opsi Fitur" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Opsi SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Opsi Debugging" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.mo b/evibes/locale/it_IT/LC_MESSAGES/django.mo index 82dc635a94bb60d11785919de3d6a4375428d3ce..fd1353cdf21fe5600e03cad73dccf914b172de0a 100644 GIT binary patch delta 1313 zcmbW$Pe>GD7{~F~b+b%u)ygve^qOXt1wv7Q1|}F?j1CDN0vX+Lo7mmao!LYWEuK1b z3=cs;1kt~P!4l{x!COUi38J8z=fqP+LEqo*c<2_r>^q-%=imE0&-?CH)6eF@x5oIQ zq4m;R>0yO2{rEn{fwo*}Og*kdzQrcSU$F-_u?t(`#?;{;>iH|!faBPVGtvFKxS#QT zv<4A#xG-Fn*4QaTyQb=ji?h zwlj`b$$~MRoG79pY{4;X#1L!n4p!qmRE7_u@ylrZ8aueYh6;Eccj5-BQa>UST-3zf zc%3Q_V=eQW$GgfIETLXl!?XAWPh$hKE1+RiCSzF29D5iqpfY}enqUP>8KahT1ND3z z(P>HAQGxbxD5$jkoLs;`yok543s+I4T}QpR6l@6AeA*#+#I3n z+iD6%?F3zWO>?M1^;-Y!rVlGCZ9+9=%;q-7HK3^yYFY|4_E9M-{ZSN*0#NHLQ`*GJ zQce4ct2Su|U3;XP-dfC5j#Lyb`?EIVWan(s znG5W!YlG0wxi;elfs=9rJC*Y@*2((Wxs0C=Y(8*vf%&(W^5G3P8+wyY=q95VM;tF* z{-i%0dVbav-^HI)w2ua^z2>IfRL;qqn(#wAmCsJ-*@kvx%Zs&-P!Bi?XIqNHari;F!Lny zUMk`;zDjdoR5B6mIFmS!-JCx|f3t)G_#F%Q7md#~M0DVB?8S5F_c!nu-bUi8@qk4a z7iRGYKEYOejd@%`KJlJ|H(tS`_$6@-+c@9GGnmfuQ0znFM({LFBtAwHSi~aFk2fqj zx$ps7@EbPcZ#3ie?FJdF-BWP!?Cr+W=te^#bCCG$+qH&veh37}M zDdG~2qKQ<{3Kr0cU*a&nLo5A(R`dsr%aE;GS488lqOHG$c5oVLPTa=t9}!=z+nQ1gYbG~KHN_FUYUTyEwD&-uRbgw=l)wE zTM>iIA?D%eVNqn-GKYT%t2aSkREJ$TQC}Uj_!Mj3c8l>PD={5zlfz=&`zV*oHz!LI ZleJHoYpGf#yPT?xHU3N2KIYrf{{hR;Moa(z diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.po b/evibes/locale/it_IT/LC_MESSAGES/django.po index 2d2c3c9f..557c46a9 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Un'entità per la memorizzazione dei dati analitici" msgid "Save responses from vendors' APIs" msgstr "Salvare le risposte dalle API dei fornitori" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Utilizzare la funzionalità di Telegram-bot" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "Per quanti giorni conserviamo i messaggi degli utenti anonimi" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "Per quanti giorni conserviamo i messaggi degli utenti autenticati" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Opzioni generali" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opzioni e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Opzioni di gateway di pagamento" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Caratteristiche Opzioni" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Opzioni SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Opzioni di debug" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.mo b/evibes/locale/ja_JP/LC_MESSAGES/django.mo index e11945d65a67a96ca42092f3048f232cca3b66b6..0a4db392448b2e834965ed067b517f51f581c9d3 100644 GIT binary patch delta 1322 zcma*mPe>F|9KiACYL;cGl~&rHN&7E_QBYBbFoGiTQbGqICLL>Gcc*q{F;C0xfE8O1 z$yP#<1x5B(SPH|$pbk+%bO?f|%X7sp6?W+o^!@F=?)})A&%F2M{rk<^{G#vm$*=Rv zvWjTtTFT{@D76#cg}4zTrAk%fGvgbqqx>1y;WVzohBBq*;%=1p+pq?Y;u1V%+A~;7 zc>sAYsUGvNkct;rg&(mJ^Eex)k)Qg*Z7YUmD7788p-glV7huYm#d(y6a0QOwBK&09 zf8uh=W#wX0sU{v|MXlI?M{qv+I0w&Q1@@!t@VY7AH{~a|lKPh@3(n(A{E3pO-^MB` zW#Tp1L6-MoE%U2evx++(LD~6hY{8Gla%Pu>ZNtTQ2xXv%F@uugd#3#r%7(t+TKr|o z4XjSy+l-RA1DK>ub?~qQyRi)iQFinLrM-qU$bbzf9XF$-wiRWe$50m7kJ9h4ssCUM zu`B7n1vlY-lnkG)B>$4q3>ESX2T;lnO?eb$g7+u`NF$G`&e()9Pz!FrJxFF18CQ*5 zvUmx}f`q&yXN`Ro&P26*|9?TY3ny6)p@f`X4!2q_1ws}mArne)jtW_jKZ+c)i_}qoh#u^KsQ4aNzUECzPI|n#(fff2`v{G9c-dL$!u$X)aoNuq3(9 z?XjYEtk>$Ydp)biu{__6J66>3Jo~ugS>16rYS}S2)*E#bo|W*NxTpTFQ^G&t#Qbol z?K@qj<3T$dDGuqL^uumU<=&RvE?M60Io4q(;vA3L(T&Gk-|9}pI;Gu?g#F%}Ti#fj z%%306U%a4$J34r-(@*7|%INetoqD8$n>q+|dbH3qLe0eZ_58!DlUHs}W{1_(y$e%! zc{{7q=XL7Fe+`koG%=Q?|F_Hi#jz@MYCxwm%$d7b(H?5nL7xsD==87-hIBBfgKM&c U;4G6*4&9gv#>#-Yke-x{63YnKN3pA=2Siw@<#3J0s0z5)~ z=9r5XKEq19wmxAA{ZDK`e~6c2D{5W>n{m>*hzei>8+gAtpi#lV1s38h=Hmk@;y2s> zvi%=)7%vY01=xpq^b@Gej96z-*-W8cc*7)p;4|t2Ke3kLyHE$M`v1R0E*10I~E!%f7qX*7uXkr$X!WUFPLGrJF22l@A zp~jc2hp6Z8u@~P_nT(P~Wv&Oc1w*!(sLqrk&bB{V&=AeSO>x=ntVZ z>#%7bRl2BAul09Gn`kTb?2PweF;vlkR3Sm$88MFIj3r}}N%t}^>~mA06Q4Vt=LFnb H!L\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "分析データを保存するエンティティ" msgid "Save responses from vendors' APIs" msgstr "ベンダーのAPIからの応答を保存する" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "テレグラムボットの機能を使う" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "匿名ユーザーからのメッセージの保存日数" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "認証されたユーザーからのメッセージを何日間保存するか" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "一般オプション" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Eメールオプション" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "ペイメントゲートウェイオプション" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "機能オプション" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEOオプション" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "デバッグ・オプション" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index 1ebb926e..d6061bb3 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -124,27 +124,39 @@ msgstr "" msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.mo b/evibes/locale/ko_KR/LC_MESSAGES/django.mo index c16cdecf53b5eb454334d16bce6538561eb81c50..e0510015569af94c71f67a84746435beaa758aa1 100644 GIT binary patch delta 1279 zcmb8uTSyd97{KwfUQ;X0$}~-nc}jXX4$DH}?nK{>Q&R#G0UKstHpEjz9 zdP)h!_9@kfZ&SDtiBzTX@P+3aETH}YYjF)Lu{cesO?U*Q{R!NHXR!z`dGCjCJN27L zyQq51k8M17g}Jzh8*vGW6184`t$N zJVTa`VhQuByBpS5{1Rn?cUXrXJu{hIGP56LCrv0jKaD%_qF29)vhy1#<4mE(8Lz(R zz5n95hEYDB^0915Z8|pKA>4&wl!1m(Qaph&!85GG*C_2=l!auIu1c&z+39hV_W_jt z{V18fjdW2@bI898IL8AyEDOk`K5>(V->?RMp$t&N!62Ke5oLfT&t{YfTae5q+w4X* zm<$<1qK+bGP5MeE^W^*g39_ABy`)+~79`o(BNajxAR%W%f^(ESVDd+iP1I8)D%MFJ zV%D7uIahq{o-5xfB+8;7QJwY>K>4;^7E%k4mBKCPBWCvRPw$bKw zZ1x8_*M~H_?0^|k@rATWU+F2!&?k*fqa*AO?mcJPx;+wVmG}P6fZY=}Gv-q+%sLPH zw0q@|du!UA7y43Ga` kzxckaufDRCz7gln!1D8iGjU%#GyQrw@x&RN^oCNu0icZHtN;K2 delta 920 zcmXxjO-NKx6u|K_qt4j)QCWVZSu<*WL{J27+-12PX({O1l{7+&a5EsZ2yzvEYs5wD$16C6-oKB%_z)Rak7Z6SbKwb| z#|`YnEi7RJ`Nb{=Cw_;Q@Kf>#yXpVL>zHrjr8t6)o55>XO|GB|c#cE7KejpP;lc;( zzymyoU(gkQPyJu1{}(G0g>rM|28es^*hsY=|!VZ4JrSH-$1TI9qBYUo1h z=)ea0;(Z*$V>FfR)W!P~=<{=EN*9n{JmTPdYv?!d49)B-bleV3;QJE!cY+fxkfk_9 ze%Wa4;3+Z~BeYSP;ZDqoB`~b{S@;s?W1U$^{jS`p;Wy=Cs9qLsq+tE64W)=1v~k*5 z3~(|;bLWPC2v_aSER!)wGeZX7UzQcWb}EtWw2X%3G~ATmNK`772lM6XeDh<=y\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "분석 데이터를 저장하는 엔티티" msgid "Save responses from vendors' APIs" msgstr "공급업체 API의 응답 저장하기" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "텔레그램 봇 기능 사용" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "익명 사용자의 메시지를 보관하는 일수" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "인증된 사용자의 메시지를 보관하는 일수" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "일반 옵션" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "이메일 옵션" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "결제 게이트웨이 옵션" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "기능 옵션" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO 옵션" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "디버깅 옵션" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.mo b/evibes/locale/nl_NL/LC_MESSAGES/django.mo index 8ba012f9b02b6f0b8673d901b3382c9e89de2185..84a06cc173509fccb926df022a4ccb13f39e67a5 100644 GIT binary patch delta 1308 zcma*mPe>L)7{~E>)hx5rG%eF?%Th}^1d&le|0sgcQ$axxtB$WrzPq-&ui~YbAm|Wu z2??Ptk%#CIB!xkTpi88OIs`!>64+S`qD#>C_d0f}=)v93&g{-R&pb0uHr#70%+;2S z8={k|nJdj0a~Nk!xDnH(#?;^o=UZ%`{Rum833p;snKA3}80z~T+<=#{5wE)Ux3He} z1oBpGP$J?l_dG4G+{lGk`wBK+m){%|A+lN}=X{UAlH(YxH zmGCq&)V!~x{v=~Q)1i#Nx)GLd4$Uv~Fvem4 delta 920 zcmXxjIV?m$9LMqhE|y*QeXL{GEfN|>C?u{zLzEIV8p-M;iVgJ&iBQoH5<1yXC?tqV zL`02fs6`x!g75Dc|LnZao7vg-{_~&N&GOxn_(MVJx)IH^O4_8)tP?l=T!>hTSsu!YtWy@OR*L;uNSLv)H#bvAc0}tZ`<4yFmQ^Qc#A>2M`irt`tPp) zgHgt_1Ahs&V>8TJdavw0+rAfmf=3C zGUuoj-k=`*g8JR3>t~X^78FKRunj4W^uqO z(_z!96wR~>@9wX}s+vwaJK^nh1QpsY1?%(9h()8(p|Qy5Sn@2T-\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Een entiteit voor het opslaan van analytische gegevens" msgid "Save responses from vendors' APIs" msgstr "Reacties opslaan van API's van leveranciers" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Telegram-bot functionaliteit gebruiken" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "Hoeveel dagen we berichten van anonieme gebruikers bewaren" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "Hoeveel dagen we berichten van geverifieerde gebruikers bewaren" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Algemene opties" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-mailopties" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Opties voor betalingsgateways" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Functies Opties" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO Opties" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Debugopties" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.mo b/evibes/locale/no_NO/LC_MESSAGES/django.mo index 33066ed1d84cd74333d3ab5fe085b7db3dc238b2..5aaad02b15413b3a3d1bbf85649ac7cd27917d3d 100644 GIT binary patch delta 1302 zcma*mO-K}B9LMoz*Ud7^x61M*9n}*UjA-o0(OX4ofEw z-3o)EEGyO%}i!0cJZ7E|m;|bL7&tfB9#umI9zrTUo z=-)wpS29nz*~){LSdSlY6E5LKTtWWKFD?f$xz3owcnG!7ByPd$v9nl5{}FcLJZ{I2 z@%v@$pr5LiC1bj|QAPvUhQru|5!T`i*5EDF4)4eP$8moSyLkQzmGBa-$7NKdzQ@+{ zPz(3sC8~T1>sa4B*ifm!Gt|PbQKkKa-I!!`?XVZM<0Gg~bp|!zIBMJsw&GpXj^|?E zqY_y{{q83!(RwZ=m9~`|m9!I&<1lLB+o(_S0=4i0YJx>nX}_U%UPqaB-~sHx)2Q(t zDxsUG%05AjdxM(qYc2IB8S{e&`sOJv>NlbmZbMDjhZ=AWRazG*j>*Ob=+M80RMt>& zvx}y=6niR|{iw4>-m4XA(D(lnnox^rVTDdFhuiE^htMZbr~(Sk(dusWkD>$DM^k9$ z3UXOJKf2fMmAF2a&XB65%C{WjqEML>J88RV4(;F2dC(zMx%Dl3Y3=2F)li}|=ubO& z*DE?{w-`Fp)(Im&uuk5Fp_{RxGZy%H$Mt-#nD+~zQwVJknzaooMB~&q;E*llge)VFqG&to4$~0q1 zHDd#3D(mFjOu${<=F(YS1WfJ5$y#S5C`{PEnzausM9P;PMt?`2Ob3+0dgb#qpA%gJ S%=urY{bV{3Ua4eiBl8Xg z8;Nl+(S*quW84gggT~nq5*7mAS1%{M{k{8o@4NS$`?}J**^5 zD_OpXS}vjkXOoNAO@A4kvyMaf9oz5_9bd>tT*Myi#arm__puA7ka6{R!o_87%wape z!1K6@MO;Td@s=+i{2nji=j0w;1zD>qq`f#0?xp zcRYn=`WQWu=V%7Y=)^a86}Qn$e_GBh^OqkNb8+vvhy(dX?IslOBQ)ZG$x zAxXqQau}&#lxZ$(-ugN6&A2E&^bba4~1+#aFfMtmVTy=GX^g6D6EUHm3(n06Xw zZg%d}@DDLU^DNE6sL-s0VTlK5zU?OAOEyR|JSKz0n@1F-QfX{*aALCYF?To9sI_cm O8sn`$vW?fpKbaE^yhYCd diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.po b/evibes/locale/no_NO/LC_MESSAGES/django.po index 737be3bb..760aec15 100644 --- a/evibes/locale/no_NO/LC_MESSAGES/django.po +++ b/evibes/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "En enhet for lagring av analysedata" msgid "Save responses from vendors' APIs" msgstr "Lagre svar fra leverandørers API-er" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Bruk Telegram-bot-funksjonalitet" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "Hvor mange dager vi lagrer meldinger fra anonyme brukere" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "Hvor mange dager vi lagrer meldinger fra autentiserte brukere" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Generelle alternativer" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-postalternativer" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Alternativer for betalingsgateway" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Funksjoner Alternativer" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO-alternativer" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Alternativer for feilsøking" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.mo b/evibes/locale/pl_PL/LC_MESSAGES/django.mo index 7b096549c3f4adc425205a393f069998b85ae604..8e6c02225818260ee00ee4654bb5add86729cc73 100644 GIT binary patch delta 1314 zcma*mPe>F|9Ki9nx|OD-Sy`sp^G{|;(jllQ$bzCsI~8<@V%mM`=+2Do%rcA+OIP0+C9)MN|aR#ZD38p@Ind{&vUc=wsh}=FPl$@ArQ1?W_9N4f(mc zT80^|U`@CoW<;HYSx?gFPtyPvbhghz)o-et!cu z(!PcC%d5xSY~aC5tiktKjq|t~7m=U(!(}g)tx#$|?n9Yq1lQx$*fCs7`vGplN!)}V zTX4;V*w@d8SKVSxCbkkT>?6Qo3R%qwFYIt5G7;dC@Z~(66iCO z0N%vyFDT!AkCkZilJYukdaxCbV+u7sM9IJ`N?;#QQvMYsu%9Rab<#=B&Jk?G3)qU+ zP~K0VZ1Ib@{SJvieXAn>a`S@+{EEwvb~Ve9mDHo`c{j?$DI_T>KpFT7%1XykCcckk zR*~^y05X=89VOH*lt75PIDW0{|5A~G+o_TfDUvDgCXP+M_3RmbfmI=PWU+Cr5*?VvUlobtXz z{)885$8sZ`wjy7LM*D%6HQF)0Zw(k<_h&svTdwCuj+gUw&No?KE$^dTFlgMsPFaCT z#~=1tcBV9>Hxk&Ms|vHpiA3{R-{>D9WlJ{1|4x)m$a;_|YGGlbw zwe?7L)T9QzFgIkJNQbtS_8f2ecFNXXx)`YKcwv+p)Vb;BQ84UNhHOpf*1v_Qzh=SD8~^|S delta 920 zcmXxj%_~Gv7{~E*#~93be;=P)L zF)mv-u#)~B>YXIE;3F2`7izrEYfK4NVGuh|&quHVr;%}Sv%p0;H`cHSw=o}&(T_>w z&z$k24_{&#-dUfqkp4S1q9>b4u?aOUiVZkvT|_0Yg|*CY5?qvW;|c?q#yrfRGJdoD zPuu^&F!u|5e+hPD4*e*qGQ-vxR5fF$#P1oT=TE4FKe3DXjW^er9_&RWGLO}`iYnnQ zY6S^YWv)>xd_X1miu&+}?FYzS?**-$sLBpv2q#brUBb9BS?59-ZlV%7L?v*CIukG0 zj1K$JgsrIO7+GziwL~3a*_J;l; z+G(no%BhIZYTT>8Lt4+ZPP-PPLl&Ybv}y$lcel!f!{O1X(BxF=I%~*D#j?+x)L2f& JlS=x(onPF6MMeMs diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.po b/evibes/locale/pl_PL/LC_MESSAGES/django.po index 6100332b..322943bd 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Jednostka do przechowywania danych analitycznych" msgid "Save responses from vendors' APIs" msgstr "Zapisywanie odpowiedzi z interfejsów API dostawców" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Korzystanie z funkcji bota Telegram" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Opcje ogólne" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opcje e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Opcje bramki płatności" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Opcje funkcji" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Opcje SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Opcje debugowania" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.mo b/evibes/locale/pt_BR/LC_MESSAGES/django.mo index 866b9426358c40660465d717b594d3827adb1137..23acc17f4569a286a0b3183a78ccd470481989ef 100644 GIT binary patch delta 1294 zcmbW$Pe>F|9Ki9n>uPGIW@-5+d#0HsQirI>0x^Oh6b~64f|%UV26kq2{vg|B@YJEB zNOXuOl86o^Tco$hLy%pgpy&|nA?P4N)FtZs+kJM99y{}y_h#n3-|shXi!EPTlg~|= z1x4%U=-`M_N)6)MG$-0}g;I^UVtj)w^gm)BZeS0#XO!B8LnzOW;&!}(tvF-u-^6D6 zw~^-(^@NL^47|h!e1~;d#9G`ye(D#eqnNH#>I5D~S!fz};GA&*>*+tjy||3K@PoO( zj-B)~Rbrx4Hy0AoFt+0*Y{Ce);tj09d6W$AnEqqae~w*@uc8E8#4WgvQmLQD1_ou} zUc5||&tg66tNYdE0G3cH@fr`~Cmg^!R+kJ<;%*#8$!H3DFhL3U0ZPU%Q094$d+-}d zWowB}5^X~X^a!U!A|2%7G@ijBoWp(i3gyM3@jFUJm6T;acA&;#l*&z*@x-`@62KZt z=3h;}n(r&~_SR8XyBU~V;JJdYCTMLdK#lt6D8?;^!f4~Ee)2(96+La4SYq$vJ;kyOx*N zSt}pvSzCvZAK2Qp!_bSzuC_ei%e#IY>NvE6Q2pCWadgf0B4@&i?5ufl#By@w zDgEil@jX>o%Pgik$3t6RuygiQV7UWV{YX#7-h|w@a!!;l_*K8t$(SGLnb`6oKh#;r z3bhru)^*#nTn1d*lW;w5*(?>W-U}RtEpPRi=kS2~ueal<9DkMx3SP~RRC+v|U#f0y N^0fq+_5TK~{s6fH!cYJJ delta 920 zcmXxjIV{9M6vy$mf9$&N``mRO5tT@Eu1Z2gCA6r>s!(mBra*KQl-tRoP)MjGB7)YD zY$6&_5TU~N_cva4_Vb@H`=2*&MzZ3mH1<%Kx@ANwt(rC!Fzd!`k1rycVwR5!&J`@B zzlr)y92@Z#bMOl_KbUG(fMr;LZK%HwU)Rd=g$$fv7G7fp-lH;pcKr|6|G^03 zIl;dKyD&t*7gd>l=LD*nQB;DLOwz)4s13hi7wcOn-K-OPP#I5SIWD7ivVn~lM-54(AwZ z!9`SQw_N`K^}ZYArp5C0Xd9p%Ep~jNCo|@8&JXh^6!C; zK%q+f2h;ruYH?Lc)zJ|ubf\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Uma entidade para armazenar dados analíticos" msgid "Save responses from vendors' APIs" msgstr "Salvar respostas das APIs dos fornecedores" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Usar a funcionalidade do bot do Telegram" + +#: evibes/settings/constance.py:50 +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:51 +msgid "How many days we store messages from authenticated users" +msgstr "Por quantos dias armazenamos mensagens de usuários autenticados" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Opções gerais" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opções de e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Opções de gateway de pagamento" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Opções de recursos" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Opções de SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Opções de depuração" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.mo b/evibes/locale/ro_RO/LC_MESSAGES/django.mo index 424dbf6feb45cf2d50eb5c292cf65b7f8d1a51dc..de4831f176d1868ab2c82c08e50f4c17d286beaa 100644 GIT binary patch delta 1311 zcma*mOGp(_9LMqFBg?XUWoAA)C0U z!$m{{f>5+Du)r2kq>IXE7X(p3;4%;wAwkghcb&ji^~W=xIWu?W{Qv(mj#e+%WWQ7t zjvJz#QOAh#j5&z!@;MMQ1;&)&v)H$|h509J#U*UQ+CpPC;!)J^&tN%T!Wz6D-@k=b z%% z-(SQA=7mKvYfK|2%BUM_@d8$0gd6ZC7UOMHh4%lcW`|cmGA^DgcG&&Bz9pIRnc=)1z%Ae`hjYB32o6r_1K7ASdR`iV>WgY z^`3du@4ll7EN6eU#my!3pKE3xGkG}nG^)b$xF4?}%`o>-t$l#1pRJe z?RPSv9d>OP1u571ZWua)ZfFNmfp48;kj(f&I<)D~O@-$F9!f`7++^hSIg#5RKiK1V ziIrCdLy;FG&GdZXWL`sW=-P8`!W~RG{@%+$WCzm8KHYZ`UX+;*it-Dx$7d%Z*N%7z z*AC5%g;8p5%vYMuRUWkcu1z>L9eD|F#GwMu%O&mko>}!Ewe|h;v2>)Y2gv*NUC$ir dPqBt|r!&RH`E9)`3veTsBCg~}iOydYnBQXJ$}Io@ delta 920 zcmXxjJ1j#{9LMp0TP;ex-$m71A~A?a4C1-A#3YeeBoc|FVzEdQGm}UR42(@o4TFR* zn8Y9^5^PKcuf&A!?>heJ>F3^aPw)Ak|2h4tU8_z%l;vz0(MhYP&G^jvaL3OVkqVfV z;F5CVay;O zJLF3*KE`sqbUtDc_wN`(e~?MB88vPI8!_QrL?y6}QRcUOF3RXQ#R9y>e7r|x{Os;O z-Te>7>5qi|670cT?gvnn8F5ads+mGn;)+39=p!nz5A0`t%gZzC#vxP%7O@UjQ9syr z&ksWY-_L$HPIldA`_?z<P30xIz(^tKSwDn*71mG%tv;%jWdS8Tva z-qMD>&S}(((x`EJs1;qHw(b^H$tUNV^Bc9GFb{h%RzUq(giX<*63(D9pK~rF6|`oW zCQ@*|ykwPtLJ9u|!@Wev+pCl&(-ta}n5x6>d7(2A(*EnzYjUlyo%SCpX_VILI`oI= zpeaFZlcJNRtx|CQylUyRYf-9f6HTFQQcwV|^cIiD$C6EnWcEBT?8~NtN51TMt}l>1 I377hR0XKa`o&W#< diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index cb9d1969..2ad02fef 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "O entitate pentru stocarea datelor analitice" msgid "Save responses from vendors' APIs" msgstr "Salvați răspunsurile de la API-urile furnizorilor" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Utilizați funcționalitatea Telegram-bot" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Opțiuni generale" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opțiuni de e-mail" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Opțiuni pentru portalul de plăți" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Caracteristici Opțiuni" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Opțiuni SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Opțiuni de depanare" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.mo b/evibes/locale/ru_RU/LC_MESSAGES/django.mo index 5bef89485f484fb605bdf2908abb95c4915e884b..96474f33e05edf215985b02f44e92f6728459c76 100644 GIT binary patch delta 1452 zcmbW$OGs5g7{KvSZ}zmzQZp^bG%KwLDhev-f%L*~QPe_+n;uK>-eaC4aa(j#dk_Y_ z=(UI_Xb~;aO!9R#XcOgPW)VbDE8Rx4sTNWH?|7nUQ#9N;zcc5|nfd0MxxIzYi<9qj zB3Biql3GOd)0EnPqv>2IeHlt+V}Ixi%%lAlm*OWZ!@`JCS-2Uc{~nx;2eAN;hVMHu zm-bDhUs65fW-bq&;w*fHGjJTI;V0y$zHwQD>64UNkLyq-YQ{O(7J3zD(!P(y*oXP} zI(+{T7t)Soib=M`#`H zq0*5J>P9{bj7~?s^?|oUfRNao}>3VP0rz#Xl%tH*VhfL@j7`Q zZEExrJ#J<}BzeaSm|-($&x_hTHYw9<`n4Ido!XwZCruYm`pl5FZS)&9-S!+Ecw{eV zGi=*+&|!F@lS$c5ds>^3aL6b4$aL9uJ{gp8mHA`7I=P>KW?EiMa^m z??GHNkLllQ+jP(6X{8xgl3Dqy?J3*A#{)7LL#0@kWF^HS+ibf%|0|QGTNZA*)DNmE BUnl?o delta 920 zcmXxjIV?m$9LMolyVkkxdtJNM8E1k*B5_6`ag-7Y3L28t={7VPG$InAQL4y>LLs4& zh=@pZXe6}ah>q`XjDPm+XXd@xng9FG>}ADqF!q?^+cHEQS1H$|$CwV>P2h`&dX34# zMdu0@(BDM;<^UsjhXMRXjraSE$;Lt~#(LEAe$2;lWL(V5(a7V*5@zB$rsE!_;sNq8 z$9!qxQ_RIH=M!eof5!?;NMunAqsDb%IgU6NPzkJIkoCeG{QEhEc4+bLT5+p-i%A z#Wrlm8En99)bk7M#%C\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "Сущность для хранения аналитических да msgid "Save responses from vendors' APIs" msgstr "Сохраняйте ответы от API поставщиков" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Используйте функциональность Telegram-бота" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "Сколько дней мы храним сообщения от анонимных пользователей" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "Сколько дней мы храним сообщения от аутентифицированных пользователей" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "Общие параметры" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Параметры электронной почты" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Варианты платежных шлюзов" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Особенности Опции" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Параметры SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Параметры отладки" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.mo b/evibes/locale/sv_SE/LC_MESSAGES/django.mo index 8dd6eaf6f8fed8cd9264f8b2a1b283160db94c62..07647db6689f3eff9dbd0cebbe81ce5404b745ce 100644 GIT binary patch delta 1312 zcmb8uPe>GD7{~E<*UdCbP0R96I;ojv-hzYzGYTZIQ$d6fll$(rv^!%vv&wc^gs4Ne z!b3z5kwJ8bkj!p@bSbZe5Ct7P24a^AqP{f95BrLm1y=%pe{{Ei{3RI2}2IwTvHQ2QJ_)T#lZv zVmsqRr7RiK#f36Dj;(kO8!*Hgyn)qt8@0oG(fCO;evW&&zlchB1vld=s#4z~>$s_f zdvJ^@pTt_$HxH`HJ9vg#_%-(7GIn8{)m6%#$U#)1r*IFZPzznd7QBnv&^+$OB~*o1 zP!;=uO0XL6!CwYUdr4Ned5SH;zS4qrRy} zs6-c0t@w;;(f1na&m5+ThU-QnlAP&8RpKD_;1H_xDWrWSMCLG8Bd?<>bqlGiq2i{K zLvtzimoW!WmC%|>q+b2s2&%oFy>_b5PF0;g4G4W?3MHmcBC3M^QIvc?heC-c$YniA zU8`NRd%geKh}xo$y7?$4h03Q;nf7rw9DhbH1NBtpR_NH z7&ueb2|_<_otzB-kDuq&gf`kmT6g&m5yI2BCTxU&dODwxD494s7){~1a|{2TIs@~ok~P2 zL0Sx{xCjENMYIrc*9Sq=Hj1cSJl+_`hlIsbEKtF+x&{nXy@B&Z?UCEDFA zVhmSv9H>e@q7CPgi`Ys3G5VVg?8gIa#lPtNg@%YTcpghQjDCL;&*2PmUp4M=a+V7V zcp8`SB(7l*H;_-f;>FKjSI-zpxu~jSPyt=zZgO1*eh^&PTINf z3R`d=PvA#%#@|!_ck2JcGS^!RM-#k;P4vgnWNswyplMdn3BKnhC-eaw?*|Sue&m}Y z`fwDDY$iF2UG(SiGOnNlyuge223^S)ynuhuB-@z1Ne!S0UPpE%CU68N)Aw^&HS$GH z9QY9$;d69_d+0#lupcv?ri19aavPo4eKhii=t|d-Pi&_C4)Tb2i>`bh2k~o>{EfJU z+(|V`=oWM*N00=gmu5niD{*yB&~n1Z z<1$j?cg2=}h^sVLXlm9F&4eu8zj_+J?d(K-YkJT!9gBt6w=l}(@~!Efsp;D5{6to( RG;U?J$)>|x?P>96_8(kDMLYli diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.po b/evibes/locale/sv_SE/LC_MESSAGES/django.po index c3320353..c553d1bb 100644 --- a/evibes/locale/sv_SE/LC_MESSAGES/django.po +++ b/evibes/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "En enhet för lagring av analysdata" msgid "Save responses from vendors' APIs" msgstr "Spara svar från leverantörers API:er" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Använd Telegram-bot-funktionalitet" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Allmänna alternativ" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Alternativ för e-post" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Alternativ för betalningsgateway" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Funktioner Alternativ" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO-alternativ" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Alternativ för felsökning" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.mo b/evibes/locale/th_TH/LC_MESSAGES/django.mo index 9320688c08212ee549947fa26da44c7d6eabfc81..5ab198da21ebc77a82e7fe4fd953488926b63daa 100644 GIT binary patch delta 1479 zcmb8uTS!zv7{Ku{H`}h7W!lY7**&^YLP1xG!k2`gs6dEKk0!W#(sP#Br)@LH?hnfn zh7uW3A<;#mIn+ZDy;N^e1VKzeH+m7DDiHdA(@A=)!SOdU=bV{uzL~u~=SxlYU3sja zD9fm`s6mlZ>+!`X{!w(XQe_xMKErAB-{N8%!udEerqo2-g7SVnPR0W`9owVlr?G;5 zH}YOq-J&s-fk#-1uW$l>#Bn%;{HbC7)#9kpO0C1SC<`6NDVU2a;3WDta1Ls$#5d9N zL9C`9D-p9w)zFZLw&G0OhvgXHcszk)F^{st-l*Rn_3zA#r4O}FN_Wnp)j*sKE*_6O#Gjge?OVm>2T%<@A7Em4P-(@i!IV#z`T&jiCSp&)9 zokiI??}(F3q%uxZBI7$pT*nW*4%bP#zMp7ueW$s@OFD^^m&zo)wC|*Sx5HQe_E9=G zhTBG8G+G;7F#3+2heo%3=bHVBsq9y>1TS{d-jTt9QTME2A2u+K|55v+VPmf1P3*z})c*^31Ix(1x|!hOIty>{ zGQP)4_zBx^4f!))`Op`C!)v(bJird-$C$!kgok1VwJ(o7SaeRI5?H__&o?VvBv{zS zcHGB{_!E`!k(>W@^HcO#k4MiF%wddq9#xsA&I+oUReZqu4>slS1T`PLV9ZONZ^pTp z#7#_MA5YhYQ7mE&%eaI6n4l~pn8!!>4jlbd>xL~Z z^hSp`fD!7i2j{SWv#11jaYpNuvNMJl?@CZoZAZ%o|w2e;w5S z78hk2uLRzpO1|J+Mk;7B4Be>UeA#oL{R;KG736PwPN8f|m4v=eLGJcI(mflhKvex# z#_Hc)#yv(Wl$dRYThI?e+8sKg4+pM6`Mb~\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "หน่วยงานสำหรับเก็บข้อมูล msgid "Save responses from vendors' APIs" msgstr "บันทึกการตอบกลับจาก API ของผู้ขาย" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "ใช้ฟังก์ชันของบอท Telegram" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "เราเก็บข้อความจากผู้ใช้ที่ไม่ระบุตัวตนไว้กี่วัน" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "เราเก็บข้อความจากผู้ใช้ที่ผ่านการยืนยันตัวตนไว้กี่วัน" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "ตัวเลือกทั่วไป" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "ตัวเลือกอีเมล" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "ตัวเลือกเกตเวย์การชำระเงิน" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "คุณสมบัติ ตัวเลือก" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "ตัวเลือก SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "ตัวเลือกการแก้ไขข้อผิดพลาด" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.mo b/evibes/locale/tr_TR/LC_MESSAGES/django.mo index ec0f7d03281dfbe6a3167528d2113b99f4684dce..cc8719c8942a48390159df345e09836037c6a623 100644 GIT binary patch delta 1327 zcma*lPe>F|9KiACx|NouZe^NguPoaVPl*Kvl@J7BbSMfcYI4VIa{lPftg>B}P8~Xi zhYqn2ghdBg#4zv>I1>Fi1x6Hfvr~i#K?FhH-#7-*#UK0TGjHbYd%yRa_qFj?bMbR3 zIj)FKS}QH6P^uT-Cb$qYl}gp)^VrweNdFV2aT)hwOH!#?JdQH{3^w3ZY{rrJ{axHf z|2{IVs3y7D%7YhJhYMJPi?|V&k)Qg_r5h9LlsbZkQ5G7;EqFV295>T{g1c}Ax8sNS z{Svm(Pp%h>O0{z%8TDZcUc?jzxC!rIHQqzn;e)vUH11F1Zl2GfB)o_la0#VSKV$27 zC<}MsWvYA?EZR;}z{8f8bXunRxNRKg`OJs7IfgxW7DrJseTh=aFDN_zfwE8~W!ZyGD2eoT{-TW^;zqb=?c}VBQ^&_l9i+g(+|Sa-w*G94to< zL!*apPsB#I5QErQL?SV2h!`X$ zgODILudR!vp@~@d{;uPnp8GlH+|%>;pZgtruS~p@X73oHgHlVG^%&EKyIvkdEX$Z; zT(+)aCGBn0e~z#PAFu$wP~-jC#*|)1^%$`(qBgLBA=WqhR7&Z%KnL$I7oSl(PT6+G zwtp~8e}VsRgFP6aJ%Gy0uyqEN%@}I_8wP1ZZ>WQOVmIp>Uk(-QMNKe|%0wJPxMtrU zpfYujN@)spQV+XTs)N=p)CmVs8JtGl<{T;$^QeriU_vL{qN0iSunCV*3qPV3N@FuR z%%=A}sBdKoHEzkejyl;PY6EAe`ERirpKN~y`)NB4`6oMOn7qqz)E_3Sb4Ui=MYRD1 z-U2Gd4oZz%`};`is4HXKjGKW*ROp%%9NfKP6Ap(*qm7Yh@-l14lZ^RJJ;|{^+MB$} GbG*M\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,40 @@ msgstr "Analitik verileri depolamak için bir varlık" msgid "Save responses from vendors' APIs" msgstr "Satıcıların API'lerinden gelen yanıtları kaydedin" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Telegram-bot işlevselliğini kullanın" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Genel Seçenekler" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-posta Seçenekleri" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Ödeme Geçidi Seçenekleri" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Özellikler Seçenekler" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "SEO Seçenekleri" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Hata Ayıklama Seçenekleri" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.mo b/evibes/locale/vi_VN/LC_MESSAGES/django.mo index 2c49f2a404f76cbb13fa5a5cd01f01925222c9bd..006d5b5606a0e691693e4ca3af29c7423ffb099e 100644 GIT binary patch delta 1369 zcma*mPe>F|9KiACpDfGLEKSqwnQ4{=5rTz9VFVpAh>AQ!GOnY$;m+93EVh@H>=4qW z2m=p786qa4VS&0t#fm}YF^Ga-4jwub=BW-v-`_exMF$`I<}<&U_ujnsdv9M9eJ_cB z%+Ksolp1O&)lE~X0pFx^p-g2cm50;5udtB#16Jb_?!=NzrPkw7l=i1^Beq~MUiRPL z!~)`eq+MK%bF-NT&oLL@Vh%3gT3kYY>IauPOkbtc0jx*)P#12(YrcKBfp`SB;}mYe zcmDfDEF;d$65~o$a3eEn#1d@Ad~|Ug-oR|UgR;T_KOXhtCs@w&B+7&ra5XNXWa^u5 zE)V6yRd|6cAIAc|uLjpFXJ86t0`u62pL}ci`fg$yC8hl+?MAT*U;59#peB}C$oq2K ziic79HKSze67o}5xx{6Kz1*C~KD>yZaTlKCrL5RR>DYsk^1HYnhp__RqfF!{9>hxa zZy&Z`5#B;+H{v^wvgKcM$iM7)7GIGW79wM)YLt$3*nmxb+>6Xj4WjfL^L>gn#PdjI z6&Y7Ms3as+WHD0qQ02oihMb8!+5g{#Y^P4L3@k+^#Nke*USi3B6geAGI7g`iCVvz; za54cYvQjB5GPM}Fm+fG?Q~S>xQ;U;BU3`d(6xk;!+o+XPP5rY}6UZSgr^=y{beB$s zGn&%kC+uz=HmsO#Gh&YJHnrp05mSdv$1yrgN4H1pur@5)iiPc{qoa-)an#B>Mctrj zxuJmJnr(i^CL`3jJfz*_hHOhszRnyXL%MTrBC6epml)S>$kJBOn;EyX>m^3D)iF2WB?dyeEjdkdZ)U_| zX;zTtHgT(A(>#=X7^P+MUhIfk;kfnx3_N=~`9NPu-VbOu=p`P(|Hq$vmfe$Hd&WzQ a={7Gh#1sOw9|>q{_PPXKV%Yd=?dliPtoC*Q delta 920 zcmXxjIV?m$9LMq5!#dWvZfn`cx}tC-3RJF6cBw?76&lG>iDrXNs6;_%RA?84LTsWF zg-CQL6x4)J2;bi`{@Hn-H}mGb`OmRm;Y?NPA>`jOL@TA1GUYL*2Y0<(h@{V$Vw|_G zUqI)_SN9m9-o_PGhsaE?K|!CbsYW&CXG@3#Jf z4($bjzXUrln|dE=Wd^O2sMSoO2E3+|Ci;Y7{KP@VH)T28-~_he4r=KxQ62BF8DDLC zHQ7a}x1*kqVhzrs-djb@d<(ULhp34iV+&rOCia3Ub^PE)OPfdUZVY21#!&+=U@vZC zC*EQe`uVE*MXUp;8BU|NatW2t8uBx{T=d=n_G2c<`m5oa2EJ)3*m%9@Si6uFGz}CD zq~LtH$!ZG}+VlU=Aes>Kako^-Xr>CCDJ8@1xuG)=(EjVxvlXU^qS^k364Ua=Y=iy~ zT0R{%C8=noXz3N4KNF$ow6jz0o<~uk1F3K)sT;>}h7-|vBAxLKc+$zNQ%`y%d(4*} I4K90s0UQZNO#lD@ diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.po b/evibes/locale/vi_VN/LC_MESSAGES/django.po index da49ae76..97bccb1c 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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,41 @@ msgstr "Một thực thể dùng để lưu trữ dữ liệu phân tích." 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:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "Sử dụng chức năng của Telegram-bot" + +#: evibes/settings/constance.py:50 +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:51 +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:57 msgid "General Options" msgstr "Tùy chọn chung" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Tùy chọn email" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "Các tùy chọn cổng thanh toán" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "Tính năng và tùy chọn" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "Các tùy chọn SEO" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "Các tùy chọn gỡ lỗi" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.mo b/evibes/locale/zh_Hans/LC_MESSAGES/django.mo index 8ba95180c9d49f160dda4096ad467c8abbd10a5a..4bac7b6be3e3a298fecb90190969da437dd0b100 100644 GIT binary patch delta 1271 zcma*mOGp(_7{Kx4Bh$1r%gnTzGR+bpdQebM20Hh$Fo zi@1e$Vv-nCDxU|*=s4!$SC{?`*i!UZa>9synl_7u!k#g5v5W;wduT+ zi3{-pRX%}f%&!KLV;y5CD}RrY$ei{UN@cRhLi!7|dr=ZSsy&5La!dC&YFo6OD3!U3 zQt@F7lAL96CM?yKqfBrfrL;bj1UgW*q8~Tnn08k8f6;!|rchQH zmzPTYrNjrgiKW^yluXaz9;`u0v`5>I{FZvC9Y;xM2B~ax>~>@w(b%cojk0q2R?b9* z?Ei95<>*P4QcK86IoxWOGzd9l60%|m&QWwy`A3mti@7B7V?--QKGBfvWV@sLFK0+r zFNZqk2sepMG1O)(;4*Z3nIax!OXQ%*p(^CcoA4!+#RX5=jfT(kHyM>?lVdbmhU3}+ z%kWu_V^&*^Q5CR#hUvHcO+LH9F&Z2z;HdxmsKKqV{BCW9=~|Wg!!onBF7}gly<2Ph z)x_Jx2XR}@IF@nRsuTMm2|MX(ycuch3_pM3jkbF2A@63# z{H?)A+vI$2OE`2t(mWCl^?Ad$y@6hDw9^|HQnAtD7qnZw$?>m`+80Ke|NYIxx8$xk cBRmsg*xzi7$en4gXD~cH?OngOaAijQ0YtgqJOBUy delta 920 zcmXxjKTH#07{~GV`k&JRR%q2Ka1BWOdm;745hJwA zv>DI2+xRxY7ZE0%>%~R$ITjhOp?*fxo8~8T*Y5v7Rr0UtvyU1VQHfRXCf@R?zcPEo1-XEHTxdQ; zD(EV-YcvJtD^5yVpisi6p-Hso%o{I2tJfAPv`{UQ-HSt8k7^Z0j+9t&a?NZ$99MUWFb=s+LT\n" "Language-Team: LANGUAGE \n" @@ -121,27 +121,39 @@ msgstr "存储分析数据的实体" msgid "Save responses from vendors' APIs" msgstr "保存来自供应商应用程序接口的响应" -#: evibes/settings/constance.py:54 +#: evibes/settings/constance.py:49 +msgid "Use Telegram-bot functionality" +msgstr "使用 Telegram 机器人功能" + +#: evibes/settings/constance.py:50 +msgid "How many days we store messages from anonymous users" +msgstr "我们将匿名用户的信息保存多少天" + +#: evibes/settings/constance.py:51 +msgid "How many days we store messages from authenticated users" +msgstr "我们会将已验证用户的信息保存多少天" + +#: evibes/settings/constance.py:57 msgid "General Options" msgstr "一般选项" -#: evibes/settings/constance.py:62 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "电子邮件选项" -#: evibes/settings/constance.py:72 +#: evibes/settings/constance.py:75 msgid "Payment Gateway Options" msgstr "支付网关选项" -#: evibes/settings/constance.py:79 +#: evibes/settings/constance.py:82 msgid "Features Options" msgstr "功能选项" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:92 msgid "SEO Options" msgstr "搜索引擎优化选项" -#: evibes/settings/constance.py:90 +#: evibes/settings/constance.py:96 msgid "Debugging Options" msgstr "调试选项" diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 9ec2107d..6bf9de7d 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -142,6 +142,7 @@ INSTALLED_APPS: list[str] = [ "constance.backends.database", "django_mailbox", "graphene_django", + "channels", "core", "payments", "vibes_auth", @@ -323,6 +324,15 @@ DEFAULT_HOST: str = "api" REDIS_PASSWORD: str = getenv("REDIS_PASSWORD", default="") REDIS_URL: str = f"redis://:{REDIS_PASSWORD}@redis:6379/0" +CHANNEL_LAYERS: dict[str, dict[str, str | dict[str, list[str]]]] = { + "default": { + "BACKEND": "channels_redis.core.RedisChannelLayer", + "CONFIG": { + "hosts": [getenv("CHANNEL_REDIS_URL", REDIS_URL)], + }, + }, +} + INTERNAL_IPS: list[str] = [ "127.0.0.1", ] diff --git a/evibes/settings/constance.py b/evibes/settings/constance.py index c286d8be..6188ae2e 100644 --- a/evibes/settings/constance.py +++ b/evibes/settings/constance.py @@ -46,6 +46,9 @@ CONSTANCE_CONFIG = OrderedDict( ("ADVERTSIMENT", (getenv("EVIBES_ADVERTISIMENT", ""), _("An entity for storing advertisiment data"), "json")), ("ANALYTICS", (getenv("EVIBES_ANALYTICS", ""), _("An entity for storing analytics data"), "json")), ("SAVE_VENDORS_RESPONSES", (False, _("Save responses from vendors' APIs"))), + ("TELEGRAM_API_TOKEN", ("", _("Use Telegram-bot functionality"))), + ("DAYS_TO_STORE_ANON_MSGS", (1, _("How many days we store messages from anonymous users"))), + ("DAYS_TO_STORE_AUTH_MSGS", (365, _("How many days we store messages from authenticated users"))), ] ) @@ -77,6 +80,9 @@ CONSTANCE_CONFIG_FIELDSETS = OrderedDict( "PAYMENT_GATEWAY_MAXIMUM", ), gettext_noop("Features Options"): ( + "TELEGRAM_API_TOKEN", + "DAYS_TO_STORE_ANON_MSGS", + "DAYS_TO_STORE_AUTH_MSGS", "DISABLED_COMMERCE", "NOMINATIM_URL", "OPENAI_API_KEY", @@ -101,6 +107,8 @@ EXPOSABLE_KEYS = [ "EMAIL_FROM", "PAYMENT_GATEWAY_MINIMUM", "PAYMENT_GATEWAY_MAXIMUM", + "DAYS_TO_STORE_ANON_MSGS", + "DAYS_TO_STORE_AUTH_MSGS", "ADVERTSIMENT", "ANALYTICS", ] diff --git a/evibes/settings/logconfig.py b/evibes/settings/logconfig.py index 7505042f..130730a2 100644 --- a/evibes/settings/logconfig.py +++ b/evibes/settings/logconfig.py @@ -91,14 +91,14 @@ LOGGING = { "propagate": True, "filters": ["skip_variable_doesnotexist"], }, - "gunicorn.access": { + "uvicorn.access": { "handlers": [ "console", ], "level": "DEBUG" if DEBUG else "INFO", "propagate": False, }, - "gunicorn.error": { + "uvicorn.error": { "handlers": [ "console", ], diff --git a/nginx.conf b/nginx.conf index 08afddb0..464aa503 100644 --- a/nginx.conf +++ b/nginx.conf @@ -30,6 +30,11 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_read_timeout 300; + proxy_send_timeout 300; } location /favicon.ico { diff --git a/payments/locale/ar_AR/LC_MESSAGES/django.mo b/payments/locale/ar_AR/LC_MESSAGES/django.mo index 0b0f9caf11e0d8cf809146b67e535964c618de71..08deac85085801888b23c14564d014bd6f497a17 100644 GIT binary patch delta 2048 zcmbW0Piz!b7{Fi47O-0^P->+GeYH?Ztxyg|TZst?#Kho56HmrCZHIP}otb543T{HO zQMzs2TeI<|9z@x8LsOb%N!o*4IBEj%^5$aVMH4-sCLWZS`1@x6SQL!$Wxx5oKi~Jh ze{aiucL#Id>`i>A7(>VbzlS^Eeb@=NwJEg| zcEMqI0KN=gf&FkEw!>wZgcUfhR8HMuvYUJG)@G|U% zKf`C>4vdLK4MWj8UgxWD7i$}ygaH)2>#z_1s>(z%xC4ASh380&BDUBM0 z;>d!d@HTuL{t6}Y1PcrHLMibjDCeK>kxW;ihCjeDm?TTlI|G;CG|Wk4(TD^hZIA#DBND)q$RVT^c?uDq zG7d`rWyphQ4C%2{L3${ClE*}W;?jZ#28lF>JW}~*>_d3VY7n9IaYgv^#E<(47>_p{ z`{EmRs4HWwcUn%muB8JzZDp*`p3*5N2(^DsPtImCwm0e6fevQVX+I-}6ImV3IDwu< z^`ey>(Z%hFfr-CV)s*F=vfSZ1VSOIVy0x`j8fGjnuqH#t_kttZa{XB^436nh?b;k@ z&u^I8=d9UO*a#w997>E2)SYU_3+-uwrX=Qg)ym z?}C+brv70)t`85%Ek^^D@~3^}TJJh8F>eXA9;k91?~zBo7tYi&KTYaxefhtV_bk^g z-b);Mwozu4wz976g^hL4*kF=z{EQQ3EBo5sZkveSHzjj5%9|A(<)imZHCl}3SeRuN zC6={?DKXhVV~)+Tj+f=ApiSAV#rq4Uq@x9MJzA(8E=P-KE}NB+;`#O$UTd1F*mTvb z#cELjcloHGOmio1uCcRdHXcyW(Ht=@$Htq*^v>>6qdF?!d0v9pFl$j>V{{GSW-hDw zsktQ^3BN=}WwTCLH!)o)e%kK8$gOfu8F02iJcVeUN|*|2>+D6Bu_Nu;70s-Qoylqr zwX)g7T<&ZZrEZ`edP%IUO*IZ^b<0DFH*Sy#ZfmhODq^nCqiXa)y#yq(83z;P@}eI1 zWaaNB6lDG(CXcqb5iOYYe`$oND{N^*tBE@?{GU2eGL*n&^snELhlbBNnU>P3&mX zL@Zg_h|Neu>@C>a_@9}Rp8K17XL{$Hxvz=a*8R^q@2L>YWE=TGc9Rzt1Cgo_nd5p0 zlg#%#A~7sr03R`oPgsd>*oPk&$AH&;t{2;x4`Ch7V~fbXq`6pUVHf$yH$yA_qHY-U zxqoQD8sU}U%Q8p44pZZw@U5+6vpKU6ZZrq}4R1ELnlq(9mz6JiDwllbxpvfC gg)(L~TnyTU_d~m6KiCEP&WuO<%}F#?EJx3+e+A7)cmMzZ diff --git a/payments/locale/ar_AR/LC_MESSAGES/django.po b/payments/locale/ar_AR/LC_MESSAGES/django.po index fe776b91..6cdffc75 100644 --- a/payments/locale/ar_AR/LC_MESSAGES/django.po +++ b/payments/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "المعاملات" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "المعاملات" @@ -41,31 +41,96 @@ msgstr "الإيداع في الرصيد" msgid "deposit some money to balance" msgstr "إيداع بعض الأموال لتحقيق التوازن" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "طلب المعالجة بعد الدفع" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "تفاصيل المعالجة" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"يجب أن يتناسب مبلغ المعاملة مع {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"يجب أن يتناسب مبلغ المعاملة مع " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "الرصيد" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "الموازين" +#: payments/models.py:95 +msgid "name" +msgstr "الاسم" + +#: payments/models.py:100 +msgid "default currency" +msgstr "العملة الافتراضية" + +#: payments/models.py:107 +msgid "currencies" +msgstr "العملات" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "قائمة مفصولة بفاصلة بالعملات التي تدعمها هذه البوابة," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "الحد الأدنى لمبلغ المعاملة" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "الحد الأقصى لمبلغ المعاملة" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "الحد اليومي" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "حد المجموع اليومي لمبالغ المعاملات. 0 يعني عدم وجود حد" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "الحد الشهري" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "حد المجموع الشهري لمبالغ المعاملات. 0 يعني عدم وجود حد" + +#: payments/models.py:134 +msgid "priority" +msgstr "الأولوية" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "متغيرات التكامل" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "بوابة الدفع" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "بوابات الدفع" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "لم يتم تعيين مسار تكامل البوابة" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "مسار تكامل غير صالح: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/cs_CZ/LC_MESSAGES/django.mo b/payments/locale/cs_CZ/LC_MESSAGES/django.mo index 89fce33a034e0cd6a2248bd7d8e3e545939105c4..43c0ed6f53603dae257ea499f08fb187ccf0ad12 100644 GIT binary patch delta 1864 zcmbW0OK4nG7{^cAX=BoAYEx}%T0L$0NZJzHg$rXNhy`B-1yK;XIWu#Txn%CS(|gaI zdQ%~y5Q>o1AYIhWEQCsl3PE(CaWUgkP+YhW1sCE*5d}BxLVw@Py=iFZria}8&g*;q zzcXw5-afqe%kI+qiZQ`=fbYV9Qcu7Sw(yV9*s9cd_AWxXvsO}S6#fne;Vn1Zd_BN*+6FTp|LE6ZdL3?U+@ci>TY z15{2ROs|AUKrnOuILFL4Ws zG@rvq;g>mof)BF337>~MiH7RxH8=?`Kv8Zf=hgiDIuu1dfzpyMAY!N=;6?cJ2>Q#$ z%UCDy4Jhkx;RO5zZ6iy=K0d8LOUqhwCPisCm7QKcC2NadFyt&}#1&FV@T$JSK>o9HBMG@@7z%bE7IAklMNy=1ae zy0yJDUcP-*RZURO@DT<+pC@V9UyD;88<&`h4Gofw$RXTFAkXbcM7Fy?v zby93FiGwH(e73r0+l|spViz#hVfPx!L{*v=HI3_hRjFwor9RT-xYKq~s-tSPd#!Fc z(%t1wJD!iyQ?0e3)3ailsj79Zv$Ecc+Y6mUX?NMDJ*&jq`CO*?N@qpdDBAzHwv1Td{Xhh~mdY~oGPj*9K)mT8Cmigt#>rseA7@YSND-DNpy#F030 zosX2Wjk@s??+#}hntFb{shxIR?4{tu&ztqsZNIU1KQ_cmIxGF~{em{_+^aGqzhIlK h?(oSoQj0B1ioG@&b;m}gUg1VLE1GUr{~dl|;D6;&%?|(o delta 628 zcmXxhzb^w}7{KwTdhNB^s+MXgi8e%A@uP`F7%h?}#LA)uB$Y;pM9_+f!E~XK7$pW{ zg+YQu`~}uVEGB|M%)U>LC->avec!u#-+SJ7H+dT?KZlJYA!1}FStEPNQwKLm-1GG6hwV~lruMcQ!=P1ctU8m$bJkU7M{ zUOd4;y!#vfz$E=|)C!`F_Cy)nqCbIJz&)n%5m{S4kxJzU`BXwwv5Il@vc4SBSi_1A zppUY2t0Tyd*Q?@DJ#>K(86^WGb4nYj-|2Duhc2w4N25opN2U?6k!IwCWPoF>hgPmt z>6U6V+0=LDuPIVpcD^{QeOI^TbB|g}?gOJxTr66bW{+d7>hxR~*1Lbm+6#\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transakce" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transakce" @@ -41,31 +41,96 @@ msgstr "Vklad do zůstatku" msgid "deposit some money to balance" msgstr "Vložte nějaké peníze na účet" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Objednávka ke zpracování po zaplacení" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Podrobnosti o zpracování" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Částka transakce se musí vejít do rozmezí {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}." +"Částka transakce se musí vejít do rozmezí " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Bilance" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Váhy" +#: payments/models.py:95 +msgid "name" +msgstr "název" + +#: payments/models.py:100 +msgid "default currency" +msgstr "výchozí měna" + +#: payments/models.py:107 +msgid "currencies" +msgstr "měny" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "seznam měn podporovaných touto bránou oddělený čárkou," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minimální částka transakce" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maximální částka transakce" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "denní limit" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "denní limit součtu částek transakcí. 0 znamená žádný limit" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "měsíční limit" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "měsíční limit součtu částek transakcí. 0 znamená žádný limit" + +#: payments/models.py:134 +msgid "priority" +msgstr "priorita" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "integrační proměnné" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "platební brána" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "platební brány" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "cesta integrace brány není nastavena" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "neplatná cesta integrace: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/da_DK/LC_MESSAGES/django.mo b/payments/locale/da_DK/LC_MESSAGES/django.mo index 3efffc3def5ff5b5b88ea799b9efb5219f96c2bd..5862da4e979eff6b620a0db003b1788f0e5e93fc 100644 GIT binary patch delta 1873 zcmbW0PiS049LFc^rZK77KdGj*f1H@6jde}+Akt8Z)j&{!pryUo%k1uC_p$HI+rF7i zT@+Rjf_PmE9=u7l3W5-oAZQN}&-Lm-@gQD=(t;Oz@$=h#FG;IjI_z&hGru?Uo8RyI zd+*x*o0HvN_Li z$KeTh2%dopa1yS-F?bE`gsX5)sjj-tWH*k#p#)6hfN_a!{Y{pxEbQo&D968Q~ECAV|lfs#lGr(`|> zD{u-v2v^|Sum}06-J?n!hX-I4<<7z;yh{0H{ChYgN}quv+^^nXA{SR7#i#&h;ahM4 zeh!bq+fXi;pqz)HhG*f)e0>R$t9l1&_#PC6K7(a=9qxyJ!VVlJNLMy=nTUi}ph&X@ zCByHaNcl6|1OI~aa0Izz-y)ROyauI!Hk5rUPGmnddF^L_(4q_UUfYMtziLrX-svNlv{S}m z>AwuArWleTO80vxs)zz4+?O2OH6+<$h!XN;?8A7M)iF$}pTPKd`mGTa`r|@mFQ2nP zub$d=W9W2}80~G#WG2{}jw2s*x}>Y^EVHf}S+9M&)k-sYSn24{h`g?|^|I-db#F&$ zs=7gpZj()SWD258RtzkM5*(~wMo*p3w~BVqZ7*m?b70?T{7)B6iIY? zGo`ty{8AmcVCy7H5ZyANp-IT4ff_>3l-}=deZFk6$W&tMRpgdU9M%4HdQMNzNR%hN ziqm?k67y!1kn@&Q^F&n=x&M8Xy3iO@K2PaMzPzvEok?u(X6fith0LmDI*E0mSo^}k zB#Y843Z2z`!=IKGnkl{Px6)>`S6XRxx@uVv~6%yQo_PY zg@vV$U`fPEBnYt={%6L?ocY~5b7$^7_kO0&leqv+s*+o8*8S=!(jTo&HnWa63 zS^7JEk!C!@5Z+=O?=Xz_n8Qa*W61Kx4PrO_F-+hbc8KiC5{*?JY$KPvaqGk{)E~wI z-UqE1rJuzm9LE?Q;})Kxj!y?g1~7-qEPMf1@S4>Q@w_+U6*`9@<`;)XBQG|Pv9gaN zc!>RYi(2V3rtlS8F;egCS`Tj0pFl0(68rE5x#WRc8@`|x@PkE+(6O0c)@V3b#U}i~ zEdC-3cdMf5hEAYk+DV(#3H0Zz$z3G4p@nGZ(dg0Yk!k3{HMC$(NQOC9H`qP*Ty#q{ z8a$-sUzb|R|Lijdfs}~`Cj-U2<5bM2-DdWJWy`4)D&{KG?_00=!)KQHj%7^Mo-*&Y av1aw%d^}S>o!?k=O65X+t#%Qg@%;h69YhWQ diff --git a/payments/locale/da_DK/LC_MESSAGES/django.po b/payments/locale/da_DK/LC_MESSAGES/django.po index 9548cd21..8a545bde 100644 --- a/payments/locale/da_DK/LC_MESSAGES/django.po +++ b/payments/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transaktioner" @@ -41,31 +41,97 @@ msgstr "Indbetaling til saldo" msgid "deposit some money to balance" msgstr "Sæt nogle penge ind på saldoen" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Ordre til behandling efter betaling" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Behandling af detaljer" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaktionsbeløbet skal passe ind i {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}." +"Transaktionsbeløbet skal passe ind i " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Vægte" +#: payments/models.py:95 +msgid "name" +msgstr "Navn" + +#: payments/models.py:100 +msgid "default currency" +msgstr "Standardvaluta" + +#: payments/models.py:107 +msgid "currencies" +msgstr "Valutaer" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" +"kommasepareret liste over valutaer, der understøttes af denne gateway," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "mindste transaktionsbeløb" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maksimalt transaktionsbeløb" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "daglig grænse" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "daglig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "månedlig grænse" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "månedlig sumgrænse for transaktionsbeløb. 0 betyder ingen grænse" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioritet" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "Integrationsvariabler" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "betalingsgateway" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "Betalingsgateways" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "gateway-integrationsstien er ikke indstillet" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "Ugyldig integrationssti: %(path)s." + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/de_DE/LC_MESSAGES/django.mo b/payments/locale/de_DE/LC_MESSAGES/django.mo index 1524c6aec70f446b603832097a2c5d2b8ecdd9c3..6c9d4b3064c1432d54ea1e1407e3355ba9aa0433 100644 GIT binary patch delta 1934 zcmb`GO=w(I6vuDUNu!A$v1yI5jb2S_(vQSg5HXZ$OKi}_&(szqn>(31ZytH?zVW>~ zi4(;E#V!giWN_DoNQ5qhAh-y2F}M|_3wMGmT?pa_2zKM|yqReRiW~8go8P4EzlzI|g?dKn(x<{!cVsAp(^Ho8qQTP)agg4>6aL<5J zcfe723?71~;UatlUWP;P8XSh(a9*i~y3WH0fxn>~IJ{S>2{;P(!6)D(T!0V43XI|V z@BsV`J_-l<7%l1;lzoqP_yW9}wS}i(24&yp@F4fAFL;m)zJnsiI94p(vR47>_IBmG6FI}< zQcf8YQhyneO?QYw9M5YgjU|?mn8KvnhGg3v(xmds*w3Vwb7#Z_sWm^Iyt(g(`M4O` zjb-cg_S5~}_MM7jqcdAIsqwa?qcHP2DeKi*np(FS+DvD)YBfpaWwEY(CCqfd)(ulX zp__XPlf~Vws${~b&KYs&JI`4yZm;D~pBk5$RUalUo6;suYR+e~dQQid7uqG=Pi@)M zBHtBJZ%!BHCp(ww(0LmmmP2&a_=-l5OFTLFrYT%$^uAv=X=sX(%~a^tO%#@H`+8m< znU+(IW-3a8M8)Qindf&4o>j|+ z8q%T;8D5ud<^vnqz&GC=`l!*nvs-$nUUxxjC-Px{6TLg+te)~O-73F{*x4gLE0UK9 z)Qh1jabdeP^2EAtD7f)aL#)v+7i}6)f=w%ZK=^+(>?OKGovD>Yklw7Ncy7|74L!wc j9v>c?%eua)H%uiWdMl81Bi5-`+KtoN^4kl;D}Da}13}0% delta 631 zcmXxhIZFdU6u|M9WOHavW1_|b3|=uHW$I(2}0;h-Th zPLUja6H`3zxkOs=8ohXrVSGRzzF->bm_)D9m^X|)JewHBIqVdvN|DY61G`9(FPbj= zM*U&H-S{Amex6fU#4!xuDemAE>incfWC+u^$j0YUleuNLvy3k^iL~Q6x>;XpbTorI zWUf5oI6h$pea#{i$Q>dr4jAS5H+`==|1j6ic5M#(MWCC^mG*YBMqY1BJkoD!2 z&OUzV0G3Egk9r%~xSbWR?9c^TsG5P!Wld?L>Oy)Q|DlO!Xkxm!UYSO`fkcoSk`b=e z4o=U$7d=vqPy>nmX;Uk?-W}GVyVvr2vd+~ds}M?92cELAURkMFH{O27X3gdMF|5g; ZX?+G~tbFL$$mzT1@ThaCTr(qi$1g\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transaktionen" @@ -41,31 +41,100 @@ msgstr "Einzahlung auf den Saldo" msgid "deposit some money to balance" msgstr "Einzahlung von Geld zum Ausgleich" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Auftrag zur Bearbeitung nach Bezahlung" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Details zur Verarbeitung" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Der Transaktionsbetrag muss zwischen {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM} liegen" +"Der Transaktionsbetrag muss zwischen " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} liegen" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Waage" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Waagen" +#: payments/models.py:95 +msgid "name" +msgstr "Name" + +#: payments/models.py:100 +msgid "default currency" +msgstr "Standardwährung" + +#: payments/models.py:107 +msgid "currencies" +msgstr "Währungen" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "kommagetrennte Liste der von diesem Gateway unterstützten Währungen," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "Mindesttransaktionsbetrag" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maximaler Transaktionsbetrag" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "Tageslimit" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"tägliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein " +"Limit" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "monatliche Obergrenze" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"monatliches Summenlimit für die Beträge der Transaktionen. 0 bedeutet kein " +"Limit" + +#: payments/models.py:134 +msgid "priority" +msgstr "Priorität" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "Integrationsvariablen" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "Zahlungs-Gateway" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "Zahlungs-Gateways" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "Gateway-Integrationspfad ist nicht festgelegt" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "Ungültiger Integrationspfad: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -130,8 +199,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/payments/locale/en_GB/LC_MESSAGES/django.mo b/payments/locale/en_GB/LC_MESSAGES/django.mo index fff68a2ad971a7cf0b49c811a0544793609878e5..9239fa92b59e2b2bdcd8607839688e650f570c64 100644 GIT binary patch literal 4222 zcmeH}?{5@E7{^CJ(L)hIMHF!mD=l`9YY71lO1!p5InwLZ_FBZ4)amZr-I(2-V`jJI z1YQ^;{sG2!zA`cKog~J$YQjID|A2`vjIT_Tm%mn6NtaK-0Q?3d{fb)> z{U$-ur43R)KjjA?y0T9|((f`z{eA{XzpEhGzXd;J$8M1PIFRxPNOn{}vbzbAes6&= zom~M*zi&YrSH~oz-y#Uv7`C@xcHx)wBU_&Dw?50KeTpg40cJ6{cuRRa*FyTzo<4z!FlH~IV%ymcR2-ZBzB~o? z%c7F2^D^QsZFon7p0C0-H&S?x4*ee2U1>z5bZEH_dDM}-X+&s+OKm*Rp7e{n*-@6e zzOa^ejb2fnv|QvSQDG!aOSrPXO8<=}z(T7k>hLHxqbDL!L z`V-mol_rAa9LwffXlycD6HkeCGPJSj&nqJM1OG%Eb+o~h9<6BXFkkIx9!Mx+yV6xH z<#I?6C~HZCVeX2M3)hwKl~%~vZi`H0{u>@?-o_*l59_sz4mdP2@@%Y(^qBB{ZdAJy zQ5)7>LEEzMMd-?maHp%Sin4dhmZimnvMr2fhmS3r<7B|VAS8cVy3tZ70yzY$qzIU+ zgFtXAyMhexxUVo&x40V{BSTlgCL4FV+R(@49$bNSZFF4~yN+Zs}5-%Mrj~;%xgi@FmHgcMDWBVe~ z29r-U<~Zv3!c1e4ADd{*G%FL$S5GX=RnbzLD^4`($1yBy$D%ErCa$M4AD^o=Yx5_0 zb!KXsc&A~vj40G=_3E03BXDd2ag0cFn!PTpkL0=NK-U*4Jj&gUFgWyM3(XVGk+pv0 zL`xc{8oJs;w3YdhWfc`>{n!ZKIiXEp%RKD%U+viFQJy@G4TgNr7#|rrT44WY&%ZHy zR@O2NPVsHBXXOvF=XjbuQ}W3)d#3M}jsHv8lTF+U$uo05#*)^9uasN{a&L_|QZJqqb&T`NHRPxL%VcF@sNSP^IE7;dV+4#Q}n&Tftv3T$urJk zn)7p?$PhlFh3^=_76$PHGuXxyTBdj3EG9V5ViY%UOr$DB1|=?>AwT)%FpfW{6NdfX z12GJ7p2i|BVi<4n6ziz>rvf4~n86YYFQ5i!vRVyb_j&=A(Bl2F&Oj3sP$wv&CfG+! zaD$rk6*WNU?*o_t#Mayr2eXVVL*JG*>mj0_p=#s0rSX zg}c`nx}{%ekdD(f%^Wg9vj%sO;1;3X(qOu^x@B514;esqNaom9xA=PQD)p0U^?S(h zzb=hE->2bR`IAm4kaKneHS?gnQ+A%MNu$#61uslv)w%SioHaY=JlHieum5)Y6T!`` P\n" "Language-Team: BRITISH ENGLISH \n" @@ -17,11 +17,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transactions" @@ -45,31 +45,96 @@ msgstr "Deposit to balance" msgid "deposit some money to balance" msgstr "Deposit some money to balance" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Order to process after paid" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Processing details" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"Transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Balances" +#: payments/models.py:95 +msgid "name" +msgstr "name" + +#: payments/models.py:100 +msgid "default currency" +msgstr "default currency" + +#: payments/models.py:107 +msgid "currencies" +msgstr "currencies" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "comma separated list of currencies supported by this gateway," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minimum transaction amount" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maximum transaction amount" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "daily limit" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "daily sum limit of transactions' amounts. 0 means no limit" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "monthly limit" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "monthly sum limit of transactions' amounts. 0 means no limit" + +#: payments/models.py:134 +msgid "priority" +msgstr "priority" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "integration variables" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "payment gateway" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "payment gateways" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "gateway integration path is not set" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "invalid integration path: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/en_US/LC_MESSAGES/django.mo b/payments/locale/en_US/LC_MESSAGES/django.mo index d3070bfae948a05c279e4f457513b4b02c855c16..a8057a92e21b1b104fbd79c0e3992b86cd10b0b6 100644 GIT binary patch literal 4210 zcmeH}-)~e!6vszF(c%vT6%o_}SSiq3+7bd;TH>}{%93u|wA&)lq|V+uyF2FIJIlyE^*PDgd0sahb0dIm&gPR@^;xTXs zcnI7Bo&u-Az2H@_5Bv<=3Vs0=z;D29;BO$?+xn;wFM&J2?cfNwADjYT1e;(4z6U-B z{tE5`w_q|{5r;q?cO>Ik@JW0ta13-HkNX_l4Sof(|KEY^$90h7xRLQD$bM`_C;Pn< ztbzN%C%~)VW$=9v|HQV(g*X820)6OK1X;gN5&Qu9Z@>uaw;PjTS{wm+{o^1)5z`>+ zHw%t~ZIJc52C{zNgY3tTAnW%F$bKJ2kZf-ZWc{W<_PYkMeksVhd;~_|mmur6@2ReS zCqUNaO_0aEo$(Tgq2fc3_4@?mao0iC?sJNg zy0`|ie&2#TuLvWo-&qi{bu9c4^WAPdqwq5K*!?Ee?%kyC8 zS=MT8Q6*G2mYOmSLLE2ADj9et4%=i}%F0BW*pZ1TX)3B(89V87A4Mim;Sg1u+L0eh z=cr}Pst%MR*<(b=MK|F|0rb*LSm<)JD>jr79X(&=q#I=;K>)Izs z5NYRFghBFUOw#uiV&xTje0M`a=J8uf3^iZ`;$gkIH4#B0t1hJ4szAsvB&!?Eg!{1W zD*9?Nl(DaJBAk|SI?2DCs3`}7sv&LQ2FGgl6g$vA0LkA`ezFqFNF9V%N=CvrQ6$N! zmShJ43N@yhI{B%!D)u#ea%rn&EdN+*BNTYoz|b|>9wbap!yrC@tkBRk+fz%I^0zBu z-H-^RhLE9-;A{8YrBU~rm+V#O0LjRtapHz(7$PH)C^q?2RhMa)F9)Cu1CQ`__ zSixOGxmx+JJzZHG#EI7EW-qlQ5)CoN1{o+KLo!TbFVOUj2 zt2SLop?i1p>q>>#Ooe?n8R0P!yB4v7=T$RZ0TBsa) zSCQz!9U&BWzY)qoCqmOOB9a$%1hsoa&LkF*jyL=Xo;Ppp86@p|{iR*wq!Y#lIFgVA z`O!HUvW^1}&2=DJvK^^7$&>5$ZY!36+YI1N}!VyJ@NIvXR%V0BE9Q6 zVZ97pg2;8<7@9Ahuasu1E7Qel>0I&rN~Jtot}IoqcpDBVzR?-byMz;Ks+$Wg?Hv1h z8bUfBr&#mhL8@535IC*7*IEBSH_5TP-Cw(BA@FdVC9;)<@3Va z+0tZnWwux;U7^eQIk#(P0`sS{OZkco~;zlYP%B$jfD$vA2xmsR4L#5g2 z8RosF6-dQi>iR0>N@+c=5ri{|>_vWg)piR$C+cEyq!mgXpCrF2Espy5QuVZVVtpLD zURTyD#l8uUV+A@<(@Ecam|7Wnr;UwVf#O!@(~Xawr0(nZKumkbY2@I^KJkCe{2Oa# zalO9a?B1nj7XP4TPGmJRBTZ#BbJ3T4jZXYa6;n(;2n90_KH~-jGyfH0XZMWwGX?X^ z#s#zd-zbs-U1rv8Zm)+ii*}0*+|4SD=@BdW6>{-HzbN5j&&vQAw OpMrVrUIp{^tKxT0b;mjY delta 662 zcmXZZyGz4R6vy!sTidFskNTu4L_utef&~{r#L+=eoZO_g^#Qh#rU-)C!ATc~AU<#u z9Mq{|5l8<6#ZAOT99+b|!0$;s^yG7s-X!;z`)j>+SKed6W1)KJKKhLwqAv^%)L5O! zEaNmLINuA1wBr?q@ey0_2_yJ|DSX2L3-U*cTV1jDE| zT%snpMHcQ|W9XHBp*Fgkj?z3sx@gwmEfT!aAX*wsw^p}ItJ6nXksXpzw$&@Xp0`T< zq*~2B(($iHbv^K5xDTe~HiagPHTOIkclSfZ(1yKgi|u|j4;oH25ZMa4HFMCNj83>` s(Sziy{ySI7\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transactions" @@ -41,31 +41,96 @@ msgstr "Deposit to balance" msgid "deposit some money to balance" msgstr "Deposit some money to balance" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Order to process after paid" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Processing details" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"Transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Scales" +#: payments/models.py:95 +msgid "name" +msgstr "name" + +#: payments/models.py:100 +msgid "default currency" +msgstr "default currency" + +#: payments/models.py:107 +msgid "currencies" +msgstr "currencies" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "comma separated list of currencies supported by this gateway," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minimum transaction amount" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maximum transaction amount" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "daily limit" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "daily sum limit of transactions' amounts. 0 means no limit" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "monthly limit" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "monthly sum limit of transactions' amounts. 0 means no limit" + +#: payments/models.py:134 +msgid "priority" +msgstr "priority" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "integration variables" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "payment gateway" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "payment gateways" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "gateway integration path is not set" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "invalid integration path: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/es_ES/LC_MESSAGES/django.mo b/payments/locale/es_ES/LC_MESSAGES/django.mo index 51f8981980a5d92017f25904867fb16cc1068afe..c5ca1e7cd196fcc9d519e45cb923978ebc486069 100644 GIT binary patch delta 1951 zcmbW0O=w(I6vuDUnbstJ#H5;j#oTsUlhzQc;=(ah#GqCS76f(S=FWR}CKuk9@4ZPK z5N07%5X8mc&P^7A2nAtuBUpvmxNuPs+^M*7r?&1ag1__Ty)@Oj>1FQx?&rDZf6jS7 z9=Lj}|I=LU14Ub*AECcKq15B>!%6;V$sVQ7vGxX(GnZ>h&BI^eK6oA81NYRGx&zL` zQ}75p1D}IO;YBzNKZY}K2%Adv)mIE=S@;Wz!I`~EEy8&?2OohAxB(BrO&G$r;eGHb zJO=l18DG>XDCZt7`2xI)xrOU6gL3Xuc$oLq=L|%_cTgPp1&WeuC9gwqq{gCnz5rXW z0q=wt;ahM3`Kj3{rIz7A=n=W6VGn+U{L`#2aY+Q8hjrdp5d(Q3hrFfUfpYMDxBSKmxUh~oP>WsQE-TG zEWt*}XP`vLvqDcrX03WSuaQO|<~Up+&eKEg`KWeLZaX-O5uKQPQ{zw+=V-_WruJ@s_x_eiooNL&Q!d&vf%E@!yQxpCh?SF> z3gS+zLi45z@p+f4rK2iz(f@A6QNB4=zJc_xoZgoB$b@$Ad+qo`RhU&`dZCT-YMxaK z3{n@TF7FNZ*T1Z7Nbag!`bLv9?Zu(Vv~P7Fa9b{e#wS0{XCz0gTuMx4QX81n!Ii1C zetA#@qf4B$TqKV1jj5QUEGV2}2e1-n+J!}->^xWo(IZv1$aCg8k!w4T+b+_jc?p*- z{q=3zdXsrP_euqYj^T?O&owWWRs&fhv|{GV7Y)R>3T{ x3VpX9%_t6AsZ}oxew$u;tjep{OiU-1+8JlMNRlk6^W*iRlzih4=Vo4<_y;io%TE9R delta 659 zcmXxh%P#{_6vy#XeR_=d`w>&|s0JxvArb!o39+!h9;qg1QzaqjO2WcwA}lN{1p78N zV&yLoTg1XnB>V&7duBM9GoL#%cV>Pw_q*$*IsaN4I1#FuZl|B=9{SwJj!Kk>Ofw$F z7{~j5kvhD_Fy3JmK41i&Fpkd{#c;rz*N+_>4`VIPV5>-878tB?Vh`EmgIybbp+2x8 z=-tqObq7^ZT)d;|V;*dDH;!*omJ=Cb39ek9DYlW0=7)w0OTO^A2gGHK5-6UwpJ%x-`19x@1}n9#W00kPNb{ZfR2e3z|@? z(!)*uHxwzP{BJ(zFlamFp>by=bQD-kC(}+b-0j;a_#^iLCuj{iMQhR-s=OJR=2|Y5 qNy|)jX?fi?b}nnyQaO{gH`k55wY+0zOwueFnKjAuMxnQQ%J&Nuv_>fa diff --git a/payments/locale/es_ES/LC_MESSAGES/django.po b/payments/locale/es_ES/LC_MESSAGES/django.po index ee25342d..d0aa1912 100644 --- a/payments/locale/es_ES/LC_MESSAGES/django.po +++ b/payments/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transacción" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transacciones" @@ -41,31 +41,100 @@ msgstr "Depósito a cuenta" msgid "deposit some money to balance" msgstr "Depositar dinero para equilibrar" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Orden a tramitar una vez pagada" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Detalles del proceso" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"El importe de la transacción debe ajustarse a {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"El importe de la transacción debe ajustarse a " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Saldo" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Escalas" +#: payments/models.py:95 +msgid "name" +msgstr "nombre" + +#: payments/models.py:100 +msgid "default currency" +msgstr "moneda por defecto" + +#: payments/models.py:107 +msgid "currencies" +msgstr "divisas" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "lista separada por comas de las divisas admitidas por esta pasarela," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "importe mínimo de transacción" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "importe máximo de transacción" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "límite diario" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"límite de la suma diaria de los importes de las transacciones. 0 significa " +"sin límite" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "límite mensual" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"límite de la suma mensual de los importes de las transacciones. 0 significa " +"sin límite" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioridad" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "variables de integración" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "pasarela de pagos" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "pasarelas de pago" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "la ruta de integración de la pasarela no está configurada" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "ruta de integración no válida: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -95,8 +164,7 @@ 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." #: payments/templates/balance_deposit_email.html:100 @@ -131,8 +199,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/payments/locale/fa_IR/LC_MESSAGES/django.po b/payments/locale/fa_IR/LC_MESSAGES/django.po index a27c2656..3acfb733 100644 --- a/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/payments/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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "" @@ -44,29 +44,94 @@ msgstr "" msgid "deposit some money to balance" msgstr "" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "" +#: payments/models.py:95 +msgid "name" +msgstr "" + +#: payments/models.py:100 +msgid "default currency" +msgstr "" + +#: payments/models.py:107 +msgid "currencies" +msgstr "" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:134 +msgid "priority" +msgstr "" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/fr_FR/LC_MESSAGES/django.mo b/payments/locale/fr_FR/LC_MESSAGES/django.mo index 49efa320fbb9fe206b3593ee7be9e8dbe3cc3661..809726e0fba3803457094d882f03adc006f6a662 100644 GIT binary patch delta 1960 zcmbV~%WIrf7>D1qlSU_AVp3aUTRl2WGp5D13xy^@&=x9MMG3eP;bi7ya^$;Azf0Ny zbrwPe-8o(sUJya(xDtXQE_5*qai{-);7VMHZiE)W=l$lJWU#vFVa`0~obO!T_xF4I z^WWFHKhIX)6J^azydqpm=b`k2HZ!02m@K-nmufsdx-bs;L;2d0n zhv8%JJbVCNfmL`FPQz`uEYg+l7|gJ64eEu{`$UewIXDYX!x}sX?}eK%gs;Q9;UDlp zIK^RNktL}6PL_NM-p<^?RhUBE_XRw}`|>3N&EO}ff&2nBlRrydhZ;zQMUDI*T!%Gy z8@vKvfj!7iW^NT(g!8b0a*xB0;AfWk)-Z4z54p*3;fogFM--mC*?mY~ac>Op$3sssJ zs%Kfr_n<2CHGC5O04WEVWl^m;05zj!co04hNm_i#wEX@mR0ZFGm*FQf=udJof0sxA zk3lVx9<0NUA<79B7fqwrbrO{Oit`T1+G?sC7dlzMZB@s4e^H)Uq6-s|u=!s-@PbN=19YyGv^>GuvnO z{5Y{1hSsF6Z4;ZhrU`tSnRvrA@+5Il!@Ja^dAl7a`fL5Dj+pOxb@4~KKTG)ruh+D7K%C|xu*jPocYX#`ppTh@zC)eFG%;|?C#@V2ib>OL`IIq76)rN3O`EiayBjX! zhPF*pm$)EsCwkTD=`QI+mP(MqSZ7|2^CUve!PUe`V27qTb1{!I-}EkuT=9~sU@^Fu zjOkf8p88hgH@q`8Z{!>pUaiXMQ^U{)eaaw{-b!_KC2+*)u)s7Iad^-ll|YlTb}VEQ zEjmh=988l7@T|90{i?fD3I94T|9xvjaTNvQ%vgn7C@N%_mKjybFo3cA3j0aij0#3~ z5aalkQb}x0a}|0d?asnYD;ULL@6`0d6T2pI6>@l|H6**s>dWr>bLEDeni}-CUz&b; F;vdy1&C>t? delta 631 zcmXxhJuE{}6u|LQef`pwD)lWsXj}==PIi+Oa)2z_Xoz^7NRoa6ql{1N zBF%V=en%8l7!!93z)}(sbb$>V!T=^@9+4 z8Aovq$Iyob%;62{`(dZZAjWW=jW6OgKC;^x?k{;nTCs>O)|V0;t)PrL!3&P#8;+v4 zzFNT~_A#Eu0B)fEu|q82C29e~>@tE0WC~eEU2p}t6ySZ!LyZUW=CA<6EFz5Vn^VdIRW*Z)iq&^D;20RO^ Q>C|>=XMeAh3(VU704cXUf&c&j diff --git a/payments/locale/fr_FR/LC_MESSAGES/django.po b/payments/locale/fr_FR/LC_MESSAGES/django.po index f3b39475..aa086778 100644 --- a/payments/locale/fr_FR/LC_MESSAGES/django.po +++ b/payments/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaction" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transactions" @@ -41,31 +41,101 @@ msgstr "Dépôt au solde" msgid "deposit some money to balance" msgstr "Déposer de l'argent sur le compte" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Commande à traiter après paiement" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Détails du traitement" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Le montant de la transaction doit être compris entre {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." +"Le montant de la transaction doit être compris entre " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Balance" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Balances" +#: payments/models.py:95 +msgid "name" +msgstr "nom" + +#: payments/models.py:100 +msgid "default currency" +msgstr "monnaie par défaut" + +#: payments/models.py:107 +msgid "currencies" +msgstr "monnaies" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" +"liste séparée par des virgules des devises prises en charge par cette " +"passerelle," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "montant minimum de la transaction" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "montant maximum de la transaction" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "limite journalière" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"la limite quotidienne des montants des transactions. 0 signifie aucune " +"limite" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "limite mensuelle" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"limite mensuelle des montants des transactions. 0 signifie aucune limite" + +#: payments/models.py:134 +msgid "priority" +msgstr "priorité" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "variables d'intégration" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "passerelle de paiement" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "passerelles de paiement" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "le chemin d'intégration de la passerelle n'est pas défini" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "chemin d'intégration non valide : %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -95,8 +165,7 @@ 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." #: payments/templates/balance_deposit_email.html:100 @@ -110,7 +179,8 @@ msgstr "Tous droits réservés" #: 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" #: payments/utils/__init__.py:15 #, python-brace-format diff --git a/payments/locale/he_IL/LC_MESSAGES/django.mo b/payments/locale/he_IL/LC_MESSAGES/django.mo index 2c4756da1b00f8173ac2ac25e926447cd6a51c13..c2b99503716672d4fd8604542de5172f0b50d2be 100644 GIT binary patch delta 2046 zcmbW0Piz}S6o)5`(?UX_O3fI~usKq^8&ZwO9Euue9~O5R<^yKb=r zG7?e`oRX|fYwDQ90_sE@kSwm{0w*NY3ZyxpA^``Es8n3&h3~D`sZl5gMj3yzZ{EE5 zz4s=+4Br?j{WO@WD8?A`2=k2|rJjbh9sDqIy-J@4$y(Z=X{4 z!6A489)Zuo7vV8@5%$9-9Dpr2tyD>U#bOVJzn}yh*s0V}I0OgbX_$s*;UTyHUHCrS z4{yQ8;4TiMMV)}+cPin_a5vvJJOcwLeqX@D+^@c5AsO6&BIIW%nf#IP4iq6NjH3Ji z%)m5!0A7UezzFiE_S~=3aX1WTsND1Ld-y5oPhl@|NW&IN=FnZ^GB$Z78jKiNjLjIY?>MB0K;;hm-JYD3$#az6poOx+I2x#glLu zN(SG+5%^ug+fV`>q&yCsgi^wf;7Rx~+zY>j@-}Wl?ohX&2$oF|ycHXCX@^gQEv%63aOl;#qp3Vr7|QOS4@n@n8VD&OwE*w(oz zTUlpz+v#aNIwnz`2vpXe_mykC?YL;}l9~uruH)Tv%lE>CcIIbE-Az9KSMr|a+R^W+ zk&~S=tDIGIZ7=M62OR^8yyNGcu-MwyH`Qk~&4#I(x+!aZD&`Z@G?CfVW|`$WJ6D;j z8mF2zWn3<^)4&mzvRN~mn69*48sbvrbXD9Nrm4+`raT_K(*IPc>zv}m3PEaeWtB*E zem51-wp%q}2)fP{6;V;7$Eqsb(@WG!GsO#R6;y7F;tabA zO(C`lyXBB{y1hYX{;lTY|5fz6QK|lhS&cFS6VD~jVH1OtcvW_IAQHaI)>+Dfz@;Hi Oi3Zc^*6P3uJ%0nWJ*7hc delta 638 zcmXBRJ4*vW5Ww*{^Ee-u^Ziyd81WGmBQ~+O69h{Og``ly2V$$SRU5%0h!A5Vh+0N$ z#L9dDNpVdO5v*)1#KOw|>w`24~U1bKJ*k)cx_O$Ow*Omco~?f{#?2X8oj2WDv{f@_zZ`W`Knsvmnw| zADnauQ>-r_m*g1c@EAL>jC!IfuHqkR0n1dG#4NgaitSiL{rv&A@fjW7FB2SN7t_dp z$UP?U5h>g}#9kBng_=n%AV%u`4wBkUJHP~oHleN2)@sW%v=EIZk`BovZ8gEyGkxKm zCbV*mwt!$PZG_$}? Z%+Gtprm5JSf9vbK=wJAkC8v4b`UfaENe=)3 diff --git a/payments/locale/he_IL/LC_MESSAGES/django.po b/payments/locale/he_IL/LC_MESSAGES/django.po index 80f88319..19b4c863 100644 --- a/payments/locale/he_IL/LC_MESSAGES/django.po +++ b/payments/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "עסקה" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "עסקאות" @@ -41,31 +41,96 @@ msgstr "הפקדה לאיזון" msgid "deposit some money to balance" msgstr "הפקד סכום כסף כדי לאזן את החשבון" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "הזמנה לעיבוד לאחר תשלום" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "פרטי העיבוד" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"סכום העסקה חייב להתאים ל-{config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"סכום העסקה חייב להתאים " +"ל-{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "מאזניים" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "מאזניים" +#: payments/models.py:95 +msgid "name" +msgstr "שם" + +#: payments/models.py:100 +msgid "default currency" +msgstr "מטבע ברירת מחדל" + +#: payments/models.py:107 +msgid "currencies" +msgstr "מטבעות" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "רשימה מופרדת בפסיקים של המטבעות הנתמכים על ידי שער זה," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "סכום העסקה המינימלי" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "סכום העסקה המקסימלי" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "מגבלה יומית" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "הגבלה יומית על סכום העסקאות. 0 פירושו ללא הגבלה." + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "מגבלה חודשית" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "הגבלת סכום חודשי של סכומי העסקאות. 0 פירושו ללא הגבלת סכום." + +#: payments/models.py:134 +msgid "priority" +msgstr "עדיפות" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "משתני אינטגרציה" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "שער תשלום" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "שערי תשלום" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "נתיב שילוב השער אינו מוגדר" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "נתיב אינטגרציה לא חוקי: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -128,5 +193,5 @@ msgid "" msgstr "" "ViewSet לטיפול בפעולות לקריאה בלבד במודל העסקה. מחלקה זו מספקת ממשק לקריאה " "בלבד לצורך אינטראקציה עם נתוני העסקה. היא משתמשת ב-TransactionSerializer " -"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים, " -"העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." +"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים," +" העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." diff --git a/payments/locale/hi_IN/LC_MESSAGES/django.po b/payments/locale/hi_IN/LC_MESSAGES/django.po index 6c60edb2..bb91f756 100644 --- a/payments/locale/hi_IN/LC_MESSAGES/django.po +++ b/payments/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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "" @@ -44,29 +44,94 @@ msgstr "" msgid "deposit some money to balance" msgstr "" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "" +#: payments/models.py:95 +msgid "name" +msgstr "" + +#: payments/models.py:100 +msgid "default currency" +msgstr "" + +#: payments/models.py:107 +msgid "currencies" +msgstr "" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:134 +msgid "priority" +msgstr "" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/hr_HR/LC_MESSAGES/django.po b/payments/locale/hr_HR/LC_MESSAGES/django.po index a27c2656..3acfb733 100644 --- a/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/payments/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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "" @@ -44,29 +44,94 @@ msgstr "" msgid "deposit some money to balance" msgstr "" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "" +#: payments/models.py:95 +msgid "name" +msgstr "" + +#: payments/models.py:100 +msgid "default currency" +msgstr "" + +#: payments/models.py:107 +msgid "currencies" +msgstr "" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:134 +msgid "priority" +msgstr "" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/id_ID/LC_MESSAGES/django.mo b/payments/locale/id_ID/LC_MESSAGES/django.mo index aeb96d80f3cba123622e9b5a4ad647f5c0d5090b..2b99c044c63d53e9e060dd48f60254acfc8bdae2 100644 GIT binary patch delta 1855 zcmbW0O=w+36vrp+Yh#jXYEo@#8y%b0q)n-cC~YXBSSyq)3WB=m=Dgg=d(+&H=e=`V z9~2`BU34Y9RusAwT(}UTxKcNQOY1^KkV;qXl)7+XLHwQf?lr-*8;3XVHy>xt{hxDY zewn(mfAz*h$p4)#l5FF_Z9DI1F#YakzDxG55ep zco^=3&%&4Bqwo?Og&)B&xCR%DSv6lV*vZ0QP#unKH)a}6!U^~!oPj6dL$D1K_zrvk z-h%t#Fo)4%4nwtjyy9tiFLMV^zyhk>CvY#{H=i-k2)=_V8vYEY;Gd8)W}Gw~htp8)UWEtYS*U*Au6PypYYkQK8dQN_RP%4)GV`Ct$-f#r zhs^ijX{eFigzES=NahSB?l--l8i|T|q`xw_Tq<@i-O}|=Xc<(1`oKj$hyzgX^uu%& zt8H5AuT7(=o7PxGXbrUtdYKSxNW!M3QPoW^slJR|bndcwjIP1$rt^6ErFjtc+biB( zc-aNJc6`hAp%Y0Wws0NECAi4Oz6ds3wo7H6yL8FB!WLzxljXYE?Ap-wg>7MaLApn5 zZ+l~=xo&DA@o^U)i4WDdD3iflorYY}LY9Kh(qh(1l9g#Fj@l<|;@GfhRv&fCQpTYc z(e2GO7G|oCTAv2jLM%>fM?%{oD9r*fgq}1muWsBwFS(ay>~k#6GBP|u5c zfkE!G+=uSku5F(-79&{>lG{Xr*izD#?do6TqjIHWkj1WD`yda#-tPE9+AEUU$fYf? zk|lDa_sz(>{Oidy@mbimrZcT3=gK6Oc9p1=!dJUm&Zf&H58ehJ$%>UoZ2vsTt(8TC z3iob}oSHi)ahcbJ!B1W2!Rg2c7o>x}-ZP`uRtFVz@w&bF@A-bzgTwurZz%DimUxr! zM37I>@31o{c@=T9j9-xS?g?ODx9^;R!K0wK()(d_cA@3+rdFrplBRTde5tA9-mr9L PeYYyL6l=p{uMPbJn2n-! delta 639 zcmXxhOD{t~6u|LQz1pHxuTrl>X=#f@Ln1zaT@#NDiB&6JNwo*!QMtJCB*;S%gLSj&D_V#Id@KaUxWFVCZi}skk&=3&?2;R2OTj|C6Z*E zz$o)wr${qip&M_}kN4=oCyZkSL+Cc__hQ)1Jb_I(g&iV!Ni$gI#tw4HJ6$J!pf2dG zwm%499rGxraSXk9hTC|7`hLhIGJtVhB=K3y;0@W1a=)*}E@Te9>@NidJ{}w*mz3yw z@e*VBfLiG%4&oO!V1KPhJC0)kXHW}x#0WkkmweMTqKEAHR61}O!#ZbwIbd*#MbwIh z=yZVzByp=M9$BFq=wfX&O*12c` z8ud2P@~1_4&H3gq_p5u%I@g4Abt!XPA2jz|StFBM$(h&guw%3A^jsUJ;ftF`zDe`P bS2B|NY{5TJJH51?PHm+&QrYsIf8Oy6R7F57 diff --git a/payments/locale/id_ID/LC_MESSAGES/django.po b/payments/locale/id_ID/LC_MESSAGES/django.po index 665d1d34..17a0f388 100644 --- a/payments/locale/id_ID/LC_MESSAGES/django.po +++ b/payments/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaksi" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transaksi" @@ -41,31 +41,97 @@ msgstr "Setoran ke saldo" msgid "deposit some money to balance" msgstr "Menyetor sejumlah uang untuk menyeimbangkan" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Pesanan akan diproses setelah dibayar" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Detail pemrosesan" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Jumlah transaksi harus sesuai dengan {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Jumlah transaksi harus sesuai dengan " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Keseimbangan" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Timbangan" +#: payments/models.py:95 +msgid "name" +msgstr "nama" + +#: payments/models.py:100 +msgid "default currency" +msgstr "mata uang default" + +#: payments/models.py:107 +msgid "currencies" +msgstr "mata uang" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" +"daftar mata uang yang didukung oleh gateway ini yang dipisahkan dengan koma," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "jumlah transaksi minimum" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "jumlah transaksi maksimum" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "batas harian" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "batas jumlah transaksi harian. 0 berarti tidak ada batas" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "batas bulanan" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "batas jumlah transaksi bulanan. 0 berarti tidak ada limit" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioritas" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "variabel integrasi" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "gerbang pembayaran" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "gateway pembayaran" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "jalur integrasi gateway tidak ditetapkan" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "jalur integrasi yang tidak valid: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -86,8 +152,7 @@ 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." #: payments/templates/balance_deposit_email.html:98 @@ -96,8 +161,7 @@ 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." #: payments/templates/balance_deposit_email.html:100 diff --git a/payments/locale/it_IT/LC_MESSAGES/django.mo b/payments/locale/it_IT/LC_MESSAGES/django.mo index 5210a1312d5962da50da6f0b014e29f4c5312643..a1bd09a6327a3d569c2cc396344e40d470be2b0f 100644 GIT binary patch delta 1945 zcmbu8O>9(E6vuDr6ztTGN{fI%d!-P7hZ4*qEEQKinab_vRvZ)!?S!C&Amcpp9nN5_>4mzCa zhv6`jZU81tl@0Xq0?^rTsBv_I$}wCmqh^(U_Yom_~Fy3&*rceJ6|IS^b<&EgL%X)m6J{I!UaY==SGp z%X6hs?XqZFILjltZQ`27q0C2Oh<#K0xVLqG-Q>=!BsM6Qt((L(x7}XWN9X00XM#$6 z%d6B}aVb7;akX?*r7nBmme1naF!D2mo|e=96nth<+yAY0WTBE-wM{p*S*+%vT40bn zpS#!{Opo2FowW%W^HnmvZW_Jr@|I7mZrX%@B+(Zv2z{WF4) zAwfBT`B19iKL^jDZd1=uQ(=8$u`X$UV zKCnf)u#O>oz!*Ma7+*1uO&rIN6MUD$Va6p);5-h9)MSayCJ*+JpM22_;y3Dq9j(D1 zlGx5Ti%U3z9e9d+c#Zn~xGR#uJT6oC0`A}~)z0#Ks!gOHSI}d9snLn@;23pB=UBum zEZ`IB#6Orq+Y^an7TJN6Q43f^-M}-Z@eTQl{Gy(&OZB>eQJN|ibj\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transazione" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transazioni" @@ -41,31 +41,100 @@ msgstr "Deposito a saldo" msgid "deposit some money to balance" msgstr "Depositare del denaro per bilanciare" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Ordine da elaborare dopo il pagamento" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Dettagli di elaborazione" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"L'importo della transazione deve rientrare in {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"L'importo della transazione deve rientrare in " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Equilibrio" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Bilance" +#: payments/models.py:95 +msgid "name" +msgstr "nome" + +#: payments/models.py:100 +msgid "default currency" +msgstr "valuta predefinita" + +#: payments/models.py:107 +msgid "currencies" +msgstr "valute" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "elenco separato da virgole delle valute supportate da questo gateway," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "importo minimo della transazione" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "importo massimo della transazione" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "limite giornaliero" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"limite di somma giornaliera degli importi delle transazioni. 0 significa " +"nessun limite" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "limite mensile" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"limite di somma mensile degli importi delle transazioni. 0 significa nessun " +"limite" + +#: payments/models.py:134 +msgid "priority" +msgstr "priorità" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "variabili di integrazione" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "gateway di pagamento" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "gateway di pagamento" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "Il percorso di integrazione del gateway non è impostato" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "percorso di integrazione non valido: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -95,8 +164,7 @@ 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." #: payments/templates/balance_deposit_email.html:100 @@ -134,5 +202,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/payments/locale/ja_JP/LC_MESSAGES/django.mo b/payments/locale/ja_JP/LC_MESSAGES/django.mo index e3e1602acc7e31d4fc9ef0bc4ec5ae9c93eba16a..c62ee71e06d5751d0ebe525d4a16eac6cfd86e96 100644 GIT binary patch delta 1918 zcmbW0U2GIp6vuC2OR+^Q6h%HNS6XOAMT{{@LkyZGCWH_Z3<<^ur|q)qQQQzRj|Cybw)y8PN**m{` z&pr2i-Lu!WjWi~H*c3`LjAqOon6FeY_7ph21|N*bTE>n*_8Le!pM@B!0~f$5@D6w{ zxVDn9^5l-s1regLh*ug9kwaB)vIsJN&a87L>tvAO-RhNSXW= z@D50Ugdn8Iw}5S61GoX~1K$8$5IUMTPpJ}zKuY8|Navj(*-d~4z!bO} z{0ck^-U1V(VByvta1bO1IgkwH@uAGW3HCpNK_K^hVTJ)J#a2p<1g3;#(dRF#R(&W1^S+ zic%G}VB*i?H~0OZKaMN%sbjLqvj^6ETX9fTC2q(ODJq$A2M;TT$@Na&9*ah0tzD4~ zZp0!HJxYgdac*`i2JeFEDJlLach`j)+Wu5!9g-4`!-lGu!PtigNVD$p_YcgDOWU8?n1CI!XuK|%@L5Mo5;a* zrBHuj<@re|sz_~N*VS|PBE}f~;>xzn)SA-e_%2Y-B$0J=c zyGxn3B6T&`{;%XUNtNBDP~#)zGP8&jS7psC?~Sqmi>RVU6*HdQTzRzenB@xVim>N} zlNU}>*i*uu7WRa&Qo_y&=RzR2Muq)Wv1e>?e#Y0oB%G{p-t$t|z2s?O_X}rM*q@Sx z9?N~Tx;0VKWx~Pf1f7z7eBT$212yKoea_3Li>HT+nE_ZVj7%0j%y>h|#hGMrbjZ6t zMe-hdzp$=)$&Vot)~v8be1lF}*dGW7F(g;GL9F&Cf%T%BtKRd>s;m}rAHjuihACDn zwK#LxyD}y$m`e$3N?5(VlV11x>U^T4>rI>~r03W|Z^rA#mD#^qm=@OPQhsc?8-#ON z*w=!jg#UJ}=Rn`Ci delta 633 zcmXxhJ4*vW5Ww+?d7Bu|_{0YoO)v%mih|f!Sc`&%orSSbK}iv@QiG4ev|d7*R1&lj ziv$tvw6GEj!9s!v0TI&p3B>>0>2Pzu-MhV=z1?E8+M9h3y9z?|ko{zhjFBY=H)5Zm*h4O9aO=Zw z)Cq%b`-4sl(2rvZCozac+{H5L_=rbj1QWQ*!WXfD*Q|De=VyNV{VN8kFF#g;$(u!J zN)OK95YFNX>K~R-cd3e6_z7e9hI!Q0QA-M_KTtxQ?*?`JJ?i(*xQ$=hr@k!n_7rze zC-Aq345NW8-1;lVTA@4CMs}0D7HUfusfF}7{zK={(1mMJJu;0>8!?a*k|f7!1-oaR zi>_27WFsAaT2wZi9}e@xJ!l3z)8@J-=h{rKrOm20>c~`_zInHK-ZE=0g{I8M(5\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "トランザクション" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "トランザクション" @@ -41,31 +41,95 @@ msgstr "預金残高" msgid "deposit some money to balance" msgstr "預金残高を増やす" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "支払い後の処理順序" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "加工内容" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"取引金額は{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}に" -"収まる必要があります。" +"取引金額は{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}に収まる必要があります。" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "バランス" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "体重計" +#: payments/models.py:95 +msgid "name" +msgstr "名称" + +#: payments/models.py:100 +msgid "default currency" +msgstr "デフォルト通貨" + +#: payments/models.py:107 +msgid "currencies" +msgstr "通貨" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "このゲートウェイがサポートする通貨のカンマ区切りリスト、" + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "最低取引金額" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "最高取引額" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "デイリーリミット" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "取引金額の日次合計限度額。0は制限なし" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "月間限度額" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "取引金額の月間合計限度額。0は制限なし" + +#: payments/models.py:134 +msgid "priority" +msgstr "優先順位" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "統合変数" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "ペイメントゲートウェイ" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "ペイメントゲートウェイ" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "ゲートウェイ統合パスが設定されていない" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "無効な統合パスです:%(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -129,8 +193,6 @@ 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/payments/locale/kk_KZ/LC_MESSAGES/django.po b/payments/locale/kk_KZ/LC_MESSAGES/django.po index 6c60edb2..bb91f756 100644 --- a/payments/locale/kk_KZ/LC_MESSAGES/django.po +++ b/payments/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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,11 +16,11 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "" @@ -44,29 +44,94 @@ msgstr "" msgid "deposit some money to balance" msgstr "" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" "transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." "PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "" +#: payments/models.py:95 +msgid "name" +msgstr "" + +#: payments/models.py:100 +msgid "default currency" +msgstr "" + +#: payments/models.py:107 +msgid "currencies" +msgstr "" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" + +#: payments/models.py:134 +msgid "priority" +msgstr "" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/ko_KR/LC_MESSAGES/django.mo b/payments/locale/ko_KR/LC_MESSAGES/django.mo index 545ca714e6be415fc1c6a2b0fd7845325df9809d..b246358ccf33f5e756cd527980cb98314853cc6c 100644 GIT binary patch delta 1936 zcmbu8U2Gdg5XUF2o6>}jG%0OLTUc;ELMf$1Qp6`*oXF3BO^o$;Mp zERbxKt7V)>1UaV~Vn>M-ps6ZhVvLL^?Q7qF2i_0}`hetH3(-d^1pl$uAx*^#ti1m1 z&dkov%+CGUpADye><#&ZF@U)f^OX*wL9n~?2+zB27p9dcWGhi2Z3G4vUC z%#O1%k`(TQ;fQgVp3{;CM7}c=j{IXvqnZ&-!iQZaQMr{pco)bqcEc0bWBGsU!|satM)@3aM2#0@)cxXH?v4L^lW$#<_d-Y*6VMNzL_ z3BK@x>7tOO&qaNC3TWhNa`qAy^5V4gp!p;%XQvx}A;`^$MyA^MU`7O&mx6_ooVyTA zW`oJa1NmEEB+r+X)rup$u`H#P zv|dgNc`+kPh|0scLhxy=;V-qWJV^CgIjGcBL?q|(d%KPtTa!Xl>n|a*uaR!kp|>dK z{b0I)w1o6?(l5wdRr$=n)^(+s295-kw9FRZw-8+ZiYvtFt+-l=cvWBU4V8J4)nYJ} z7I!4hLYbLbE1aDPDxS)=U8&QnO4Zi?-%{Z*gO9y@Z+G~}+DE4Pa#_x!6YhL_B_{b{ RS$gv_Ta-nwGT8k>$KQ&OQPBVZ delta 633 zcmXZZO(;ZB6u|K_X66m%)3~Rj$3mnmZ<4a0l!cNS zY-GjC)>ep}*(ht}f8LwZocFu;zBlil`_6viuXX#a-ghWOE7?K5k}2}U!-W{E5}9Ib zW19JvSEK1eOmMnuc7B-Qel)1Fy59$j; ze)kVe7-XKtEDm7^k8lIeQJ;@nBHh@Fixi&0YrLacoAq3cNFyGj#r|@|Ak4z8v%pDE zPx_35_*+>|*19k5Lw$Z0lemDpxQFZ|A*$2^G@#B0P&XW@%qMY`c}C~#FAoe3@JSbN zhGV604k_F@6}OzwFH}dikXi(LN;64~PCLK}eUFB=Mq8^b(`a&$7}6o>r>#!#^_;%w zC)J3!IF(n1BBd4YhsW&uyG+m;^)D~w^F>pLG@Bi(;L8_tMROBKde%$c>UW\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "거래" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "거래" @@ -41,31 +41,96 @@ msgstr "잔액 입금" msgid "deposit some money to balance" msgstr "잔액을 입금하여 균형 맞추기" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "결제 후 처리할 주문" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "처리 세부 정보" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"거래 금액은 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -"에 맞아야 합니다." +"거래 금액은 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}에 " +"맞아야 합니다." -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "잔액" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "저울" +#: payments/models.py:95 +msgid "name" +msgstr "이름" + +#: payments/models.py:100 +msgid "default currency" +msgstr "기본 통화" + +#: payments/models.py:107 +msgid "currencies" +msgstr "통화" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "쉼표로 구분된 이 게이트웨이에서 지원하는 통화 목록입니다," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "최소 거래 금액" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "최대 거래 금액" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "일일 한도" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "거래 금액의 일일 합산 한도입니다. 0은 한도가 없음을 의미합니다." + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "월별 한도" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "거래 금액의 월별 합산 한도입니다. 0은 한도가 없음을 의미합니다." + +#: payments/models.py:134 +msgid "priority" +msgstr "우선순위" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "통합 변수" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "결제 게이트웨이" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "결제 게이트웨이" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "게이트웨이 통합 경로가 설정되지 않았습니다." + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "잘못된 통합 경로입니다: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -129,8 +194,6 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜" -"잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 제공합니다. 데이터를 " -"직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 " -"특정 권한을 충족하는 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니" -"다." +"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 " +"제공합니다. 데이터를 직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 특정 권한을 충족하는" +" 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니다." diff --git a/payments/locale/nl_NL/LC_MESSAGES/django.mo b/payments/locale/nl_NL/LC_MESSAGES/django.mo index 993521bbf90d799a3d36e94bee818d6b4b0f61cd..50910ee7d1b8230c641839709c4d05adce802ea3 100644 GIT binary patch delta 1904 zcmbW0L2Q&o6vwBq1zA*(Rto|$us~NNq9i8T5R)p##K5VRT2&Irs~T!|hv?+7Bn-F8Cy@!PD?z*oG;58$JmC zfQR5#E)$D72F30~$(P`L>@7S60~EV2;9lNWS6PUHAE5+t8;X)YOD;nRq{5*@J_Q@F z2JeNJ;UzeP{HdMWl$wTnV3W+v!gt`O$Un*X2`=q{4LHvG>Jp3l;agBr^Z^vZEATx0 z9v+5uWFS_Zh4@tG;PdcRC;~o)a{o(s0DcW0fImYC=nj<3Oz~KNC*fd{#b+!u{0d5H zZbFIhHrx%Dq11emS6+a1D0Ut`0t1xHeF){jPoM;Hwd6G@8T_u?-+~v}|GtC#OG?ji zyANN3qU;7d3V(%Uu22n%2CYMc6bj|+AX9?f%hXKi2`PgFaD<7ALWE>cdRhXOU}Wr< z`pXbCqagv2@gil?SduaVE=mOcHAL-bNRt*>g7k7BK*UTj`SBFZ{SYk1%g!#&*{GME z+4RHMsWde@*sjSXL$BM-a{1Wk>)3Wdw=i8a{o{JLrBZ9G znX1INP9Gnsi{(1>(v`h9jk)o`G^5LWnARrEdOn87^%FX^e9%4{U9}fXuM^oRAz zOs#xWJ0ER}U~!_mCbl&J`7EL#4o&6V!TRqDCU>UMu|YY%U^*_@aC=4{sf(9KgX(0h zOr_=xmlE^3P|HA7>iqwH%6x3EC_jz#wA|j6cyCfWyi+;+*eK1aYx=46akLMk0~Wc< zau@qcljGMb=aVeU^?XJ_r>T(*&9-%k^(6HoMO`pnrzG53-?nm`IID{*iG9Gj+K`ZH*B=? zg$e>F>Wq&NjZciplhXTKq^=gfiJFV_oL)4@W~+w>sa}` lm~{A4RXKC*px5~z ziUHaQ%;F>l@f`Q@3ibWCPh

xXi*Au#EStc7pzy29ZuIp_lpPlu8pF7B=D~>Weox zh_%0dFN6KGo3RB`$PQ!D3f-};UfU5|$36@&zm%!$VFj5>!fb08 zJCTLkyJE-=oj@m#ks(rl*iPzqdL944rtQ$H(W})f(}+4qGjc;R#DjB)Bh}Co z(P(pU%4*JCb6Lk;!wUGOtTkWRliyn1vhMtYu2R)q|KhO{p&{!wG;PJ2&c-v0$$W9e lEE?OUv11l@&EkexFbYdX*4$po=L)Mb_g66s)#vc6>lZ9?Md1Jd diff --git a/payments/locale/nl_NL/LC_MESSAGES/django.po b/payments/locale/nl_NL/LC_MESSAGES/django.po index 139f7067..31c17d43 100644 --- a/payments/locale/nl_NL/LC_MESSAGES/django.po +++ b/payments/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transactie" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transacties" @@ -41,31 +41,98 @@ msgstr "Storting op saldo" msgid "deposit some money to balance" msgstr "Stort wat geld om te balanceren" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Order te verwerken na betaling" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Verwerkingsdetails" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Het transactiebedrag moet passen binnen {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}." +"Het transactiebedrag moet passen binnen " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Saldo" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Weegschaal" +#: payments/models.py:95 +msgid "name" +msgstr "naam" + +#: payments/models.py:100 +msgid "default currency" +msgstr "standaardvaluta" + +#: payments/models.py:107 +msgid "currencies" +msgstr "valuta" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" +"door komma's gescheiden lijst van munteenheden die door deze gateway worden " +"ondersteund," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minimum transactiebedrag" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maximaal transactiebedrag" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "daglimiet" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "dagelijkse somlimiet van transactiebedragen. 0 betekent geen limiet" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "maandelijkse limiet" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "maandelijkse somlimiet van transactiebedragen. 0 betekent geen limiet" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioriteit" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "integratievariabelen" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "betalingsgateway" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "betalingsgateways" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "gateway integratiepad is niet ingesteld" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "ongeldig integratiepad: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/no_NO/LC_MESSAGES/django.mo b/payments/locale/no_NO/LC_MESSAGES/django.mo index c29e29f9b7457c8bb15d914ab32d1b69a7db1dcf..a544e6094e5a17c9e528b675d753de0ca91bd892 100644 GIT binary patch delta 1855 zcmbW0PiS049LFc=wlS%-wP|f@TAiB4ZrU2_LBvqS#)44dsnU}Ov%8bG&wX#+`et_H zf{=sKg9i_8#Xkt1LOcqK(1Yk9N1^CR@gR6oPohT);^+7FJxwcKI_&Ic{?GUK{muLE z=*^QGKOU^Trzmymaq7zxN<9fbp5%|x-KEqjW3NG3^JPt`S@<)Yg16v)xNEmk_rO_r z1|Emc!WZC4cn!|LPvKrTg3C&6sIO=oVBk+E2kzaY)Co8X55gzlJiG)Sgl(9@H{oIU zJA4FAu^BDu43u?`m%I%3(YNpd^ibA)2Ish6eNICn_!f$gpP)qYN6A}Igwz-m+$xbSL7Be_?}rhTTn`|@tGD1$_zn~Yw_pTE`|%$UYL49w zE<(;$AHYZ97Q{J4ii;wmBof*4a4|A|T*qjOrJ5=Mi3=h?T;Pb}@>6h<`VduIk#a)v zFGZrMiYUb4A~JDB96)d(4BS>E+Nwy3#4{Lql$yH_Z@d&Y#vM&3Z2QC4F9}mI>{$YO7r{y(Cm32E%%7 zdA__<$1d0iu^ghiCbTtzTo#BS3{CCrjh*v-lgFl!Sg&H&H%Z+3&+cWtP?u8{y-Knu zQ>l49PSLzWYAIBuvHRbt%!T$i@=JuCmfgDw-kH=6f2*B3TiL9-W{_GJs=luVXykF0 z$6+u!wEKE(rIV4%B9%4|MJBDz`Zm{u-V26?&rLkCho4A7UJvkQ#S7RvQ<^Aq@A;T(8nvEUMC)t6nrnT4=oUh#hHN9jCS9RQhKDE8+Yzr4&tO7}^5x$GNa>ALu8*a`lK7~s>Nf-Ij2ldZ@d~PPOxmqcg P&@5AJ!|3~&ixYnX3|OlL delta 639 zcmXBRPbh<79KiA4w%6v*USo{;R~Eyj$;!pi&MW0kv1V2?#Yzf0xVShyB;}%n`{d&2 zs-@&WOUltju1dbY_x<($p3n3Cd!FC(JoVUFwE7;lPK1b(gJgq@ljj~9V%jT`rJu$L z?)QBnU3iTFyvGneU^6~r5*rx9faQLdz#;C_7{+<*7pck$opm1UA(wp74B$8FfWapB zhX}TDKY=SagF!sSUA#p7KIRu0$0X(`d;yp6j%p`)9%*sMpThw2%Oah2UgS{=sNfXt z;0WHJ4*ZC5d_i5oFR}t@Zxz|b1nU16s0Cahm(*!=cVAH#@Ph^XL!0?!m8WH_pce9p zWB7v?LiIF{Fp27Uwv?2^Q^y9*s_}N2U>Rkq+d9B*n2h!R|S$(k<1{ zLNvNv+_qNqeR#}a)39mt&wAJL=E?3e2mZ2E+9+(8+rX%2tLAGyw#-{_)a2}psoTcN Y>bq1Z(VEFumP^HQA-`EW3e9=`0q^TVeE\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaksjon" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transaksjoner" @@ -41,31 +41,96 @@ msgstr "Innskudd til saldo" msgid "deposit some money to balance" msgstr "Sett inn litt penger for å balansere" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Ordre som skal behandles etter betaling" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Detaljer om behandlingen" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaksjonsbeløpet må passe inn i {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}." +"Transaksjonsbeløpet må passe inn i " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Balanse" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Vekt" +#: payments/models.py:95 +msgid "name" +msgstr "navn" + +#: payments/models.py:100 +msgid "default currency" +msgstr "standard valuta" + +#: payments/models.py:107 +msgid "currencies" +msgstr "valutaer" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "kommaseparert liste over valutaer som støttes av denne gatewayen," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minimum transaksjonsbeløp" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maksimalt transaksjonsbeløp" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "daglig grense" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "daglig sumgrense for transaksjonsbeløp. 0 betyr ingen grense" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "månedlig grense" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "månedlig sumgrense for transaksjonsbeløp. 0 betyr ingen grense" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioritet" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "integrasjonsvariabler" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "betalingsgateway" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "betalingsportaler" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "gateway-integrasjonsbanen er ikke angitt" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "ugyldig integrasjonsbane: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -131,6 +196,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/payments/locale/pl_PL/LC_MESSAGES/django.mo b/payments/locale/pl_PL/LC_MESSAGES/django.mo index 8132b54a57f5e8c4de8af4402af142d1e894901a..09f1d60021a1bd015d05be78029313844b45e723 100644 GIT binary patch delta 1867 zcmbW0Ply~v6o+e**~Hydvu0P5n8cLXWOrRR{(*SN8Uuj^K|&M)o)oQ_>Fm@_clFp^ zvtti|ffXWnlOf0w!IKaag0grrD8de2%}oy~o`mEedI-c^{9aEFPB30lOwCvQ>ecJt zd$0P}y`LQJ{Ia`rNipV`2bgb+DD?vTcpHC=#&)I7V0#CO&o?Edrr_^zC%gl9!R@0; zJpiZR0z3du!I$Ba@FEL;bFLw!)Q?pQ2d@P_zHZ8=K!9BDHOji;C|k(zG5L6T!$j$Hz=9>RqzfJAtj8W zd=D(c8TcT)2rs}c$^hHt}9NuP|>4i4>yr{Os7S8uX-7}lUDYr*62 z0$he)!g+WLlB_yJI+D>We<$E^D8d~?tLi|h*!zY3b9jvBYfvh41AYicd1*&7`-p`& zdo5BI_AQ0~A@=;5th z)L#sB8J&@hSdK~;w~^*TPUE6pScT*U^dPMeKJoXBQ5)4pa?y@G4Y zWQ)4Hqcl_g*Hu-G4Krdy))(uv8TFqfs85VbO~u>TrE}Uuant$q8U37&0yeaZ2S
LsAQ&Dzff>w_@jO{mhq1Jt`jWD|u(4p!-MZ$kT%|tA@#< z!1=**Ixw(EY@Ar1ZBCC~EiET;yV|xvXq?fFq#abOtDDH?JvF*z!X~XPr@i&&iftK} zRcg6gTl=jIT~182wXxX!ZfxPL+%;2qAGL&ZE>i`IZjxH2>n-ZuuT;IVYNeBL+nGw+ zNVt06wW;!OMpxq~>s=0=>E0MSb*y)p%hkJ9H-nZCAQzEoX9K+&a1WcQH!b>Xx^v@K zJMBn>1VjGntPL6oF4f+8+%o!JF^3v_rr+RtnneZ~xqLIEzu)0|Z-w?8ms%qswObpN yHU$}4-$zlLX}3)Gr}4!XrSg=a(OWm(#gc={P4+I+YeU<4+cO{d&B=*ZNB#i?|F!i1 delta 643 zcmXZZze_?<6u|LoK7ZtoOv|)ikd>rXkPv}EQ>$R~7nBkum=3uFl~9XILp-9Ppe1OC zS`3%A!aazVkZP`>AZYG;?(5*WpLg%OzIV>M=c8}Y+H1%-Rz#E>BHLt~JhL$nGaX80 zxlUt(`JP>=9=t>s-eCYA(2Y-+!ZyaxWmx-?ILthaADuW%TfVRpz3L8`~%a z)NvLMQ98ay>GTuF@CUmw;?W(b1RgP8MEUyVTlWt(GgT(?YTF7|7ZF08k1;J^%m! diff --git a/payments/locale/pl_PL/LC_MESSAGES/django.po b/payments/locale/pl_PL/LC_MESSAGES/django.po index 2024519a..75ad46ed 100644 --- a/payments/locale/pl_PL/LC_MESSAGES/django.po +++ b/payments/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transakcja" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transakcje" @@ -41,31 +41,96 @@ msgstr "Wpłata na saldo" msgid "deposit some money to balance" msgstr "Wpłać trochę pieniędzy na saldo" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Zamówienie do przetworzenia po opłaceniu" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Szczegóły przetwarzania" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Kwota transakcji musi mieścić się w przedziale {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." +"Kwota transakcji musi mieścić się w przedziale " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}." -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Równowaga" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Wagi" +#: payments/models.py:95 +msgid "name" +msgstr "nazwa" + +#: payments/models.py:100 +msgid "default currency" +msgstr "waluta domyślna" + +#: payments/models.py:107 +msgid "currencies" +msgstr "waluty" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "rozdzielana przecinkami lista walut obsługiwanych przez tę bramę," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minimalna kwota transakcji" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maksymalna kwota transakcji" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "limit dzienny" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "dzienny limit sumy kwot transakcji. 0 oznacza brak limitu" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "limit miesięczny" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "miesięczny limit sumy kwot transakcji. 0 oznacza brak limitu" + +#: payments/models.py:134 +msgid "priority" +msgstr "priorytet" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "zmienne integracji" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "bramka płatności" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "bramki płatności" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "ścieżka integracji bramy nie jest ustawiona" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "Nieprawidłowa ścieżka integracji: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -95,8 +160,7 @@ 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." #: payments/templates/balance_deposit_email.html:100 @@ -131,7 +195,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/payments/locale/pt_BR/LC_MESSAGES/django.mo b/payments/locale/pt_BR/LC_MESSAGES/django.mo index bddd8764a088baa08ec6825f566e1b144d2df3c2..b751e75049f89ade3f341b2a9dc28bf47dd89e39 100644 GIT binary patch delta 1913 zcmbW0PiS049LFc^wy_)k#HKc>ZFSmhZA^pKVxUcn5E@WI!Gq$-%VghVcVOR}?VGo0 z7lb_sIS7ifcvB&WD3pQ_dJ+E|7QBeiQoIVD>aCcgLG<%`Z(kaf9(35*&;0$(_xI=B znfl>)@8|uM4;5{ieuVz!h*ER#qh0*b+Pjsy%-R(wXTGf{H39F!QMd&kgS+=A^$?tZ zGw=v}3BC-E!8KTgU%)ZA0q2$KsqYw!v+z3N=E=Z$Pp86Fdihg@@oVE_-+Z_9Rr-8JvdSL-Ak} zio&fSrw9*s)f`-cm!O33Jva^f@BsW8N=j}+$@SeKH=#WI2h1Z#m}BO(apI3t>H`+8 z!B3zFn0&k_A`OXL?ls6o$%7*1X<49&r(*mtUDHK?*bo6H>6lbg^b>Tc>8I!t6=_E$ z|I);pvWY?wB{`JBk_aI@4>|Z-L*I6jB9$*gB0(*yXXuj7Nje`-o|=O&Z*Mqz^);L6 zjq|&1ja-alql0am)MPf&Ef+HFS9HCTrZ%ZN8+7Qj+dh@e<*v?}F6ahFubS?x?(ePC zmhT@`k#VgqHe#0z$DtD!b1|BwCJCmVIiG}6+Qhz-WZ^k|M#q*7o%r&qT``?jR*LBM zrz`Wd;iK9mnQb5zBf4#}rbbZWGknPUrt(g2=l-fmomp<#pj@(QS}yw6?RkB2TC6-9 zRLeKKip@0_qj`tap->gO+Ua)Wgq*`8V*JOxuMLmxDO^(l2Cri-u*J|En)d18ZWByPpkjlR;cIvITGb#t&@ zq}dWD^pM0TWkW66whyj9T0J+X>xO7Iy^d^|F>G=<@}=0qm<<``BD+Fv`WLG2_9Wwj z^;Jtz{Nt{=^Z=Wb#$cV=@H=YZGPRJowpY1xIv%W37Cdk6dx+w4^9F@cY&P=>&$X5z zBXz;F${C{a02ZtNA%4LQKP0OXPlep7&TNMQqixfmZj#Ka;ddhb_wQ8?R*M>mOk_7I IW3P_<1vEUyn*aa+ delta 636 zcmXxhJ4?e*6u|Kl`+jS+T3`4;u~vmvU0nJJ3Kb{8sTI+J8lesy)GiKoHHZi|XDliVcdBMXF;RD9-5&hW2G`4UAeQsynBo1<(#W)tQPoyR#CR<$CM-KU5=*Lgg7lu8~ z0|^Xqp28B&V;E0y4=+*Ik9b8UFpaAezJwLLquPvK4>*mkV2JNam5Ek#h#YdtFpU>D zi!Z318bPO{0P6ZF?8O|KxQtrB6Q=MLIpm8$*LkR38yI5HhNm#h_vMU96|YcVFhpBv zOd*Ba*SKYe{-F-Chm4T=fo@U@*CPLertQ$J(XG`j(?~c-JF-JE!?xPN-?O{YU#byx zkgh*%8fDkJVI6sft&n%Y+VIxho94P{-TKCiO2g&9cUwQ\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transação" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transações" @@ -41,31 +41,99 @@ msgstr "Depósito no saldo" msgid "deposit some money to balance" msgstr "Depositar algum dinheiro no saldo" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Ordem a ser processada após o pagamento" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Detalhes do processamento" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"O valor da transação deve se enquadrar em {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"O valor da transação deve se enquadrar em " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Equilíbrio" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Balanças" +#: payments/models.py:95 +msgid "name" +msgstr "nome" + +#: payments/models.py:100 +msgid "default currency" +msgstr "moeda padrão" + +#: payments/models.py:107 +msgid "currencies" +msgstr "moedas" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "lista separada por vírgulas das moedas aceitas por esse gateway," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "valor mínimo da transação" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "valor máximo da transação" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "limite diário" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"limite de soma diária dos valores das transações. 0 significa que não há " +"limite" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "limite mensal" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"limite de soma mensal dos valores das transações. 0 significa sem limite" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioridade" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "variáveis de integração" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "gateway de pagamento" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "gateways de pagamento" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "O caminho de integração do gateway não está definido" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "Caminho de integração inválido: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/ro_RO/LC_MESSAGES/django.mo b/payments/locale/ro_RO/LC_MESSAGES/django.mo index acb778e04415fffd2c9fc0d0411fde9bfc45e6c4..73bf992cf7046c1f038cf3b2aa851caa11bb3a4d 100644 GIT binary patch delta 1917 zcmbW0O=w+36vt1}*Ty7%#3uH`HabmGlhjs?;=)h_A+%Z}2nF4^aPr&l21Fi(?+o%sOLmAXV|xkep3fU1_k9WvaKC)UKoxukHIU0tmHb}u8q`1<7&Y>}a0O1o zTj6>53hY9DGBzwS3-`k&nR^1h4lf`d#quzRG{6uJbHBXGKpnlI2KXL)1bzfhz@MNx zoIwU+Wf^Lqr{O8sf_K7CAhF7qP&4>7RAE=(0{j!+3+Hbac^N(hJ9`*hWN;Y%2sJf> zoYIX$6=$J3I?3OY@Oh~F-iNyH0@MI5LM_SnPy@LNwdQ|Rc8yvyxCa(+YK;7=;Vlg3 z;0I7MFp0MrI19;KsT!0IbPghzc$sp2SXwIt2+6sjsp`7vBh@csg3eo(`{*iWFP)F4%!p>YY|nXj_O#2* z)?si}AYP!1` z(<|4vO3V77jgQdh)i^7{-dvsLsf{w*%zYeXv&M#T5#`wf<{=Y07EBb^N8K4)1bH1q zyF1rdoUSf4KFZxH!Q#XuHeWLY6va6j@~&;X*6Ckgx2d-)fy=~4>o)MM8%{5p!*l9o zK9e9`jU}|_d`QfFp;m!P=%fE#ilcn3r+f+NVKu!e@sSN(_t(bE{dJlpvF*@Bc|Ff+ z1B2AZsn6S66FYxsoY2~BZ`Q?R#ByZTeY#o%%&Z{=Mec$)HMZGwNlqC}%Q0~jy)J6^ z>hOH0w^PbWa&*H7k#BBq3W{v6NPSj3V=w(`+BR(S(%as1jh6PSkE6`lFk(M0d{tsx zktEl$#)nCOoxo+uCGiI7TXJ19a&)0-17|h9s-h{8)=?fSg2J1qFhuUO^cDx*r$^o; zaxJ+JN@f3?6m|A*U)77)-t2n<%lZV+9@~_w%ePP_?z$}J`_}bA{Ac||Hq==QipZwu zD(Af%c~cry$xWmzBFo)hMh-33-vY@=0+lY6Yhv`7fxiI| Cx5l6V delta 629 zcmXxh-z!657{KvocJ|ADF*eKZX|heq5Yg`3PUKIR3s%!Eq!hLbHw?lY?Z%#)TMd63H@7 zV}g0fF4Bgl=)xNe;vKs22~$|d7`lwc|B~3lJdGio$4-&5i1fM19Ur)nN>yHZaU(9jA28{&L1(1Fw+1 zWQ=O!m_Z7+y5g11O{y(^hDqdbE0E8d``(3&{z|2*+v#U(Y%h z{Sq312GahgMJ;cCwVAt)e$(rmHdmZ`MxnS|G%s9n+gi=;em2awKVjbbC(UG_Vr2DR TH5hX(6z+E(j`Ovj;GFFjjnX}0 diff --git a/payments/locale/ro_RO/LC_MESSAGES/django.po b/payments/locale/ro_RO/LC_MESSAGES/django.po index 0447ddf6..200ccfbe 100644 --- a/payments/locale/ro_RO/LC_MESSAGES/django.po +++ b/payments/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Tranzacție" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Tranzacții" @@ -41,31 +41,96 @@ msgstr "Depozit la sold" msgid "deposit some money to balance" msgstr "Depuneți niște bani la sold" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Ordin de procesare după plată" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Detalii de prelucrare" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Valoarea tranzacției trebuie să se încadreze în {config." -"PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" +"Valoarea tranzacției trebuie să se încadreze în " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Echilibru" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Balanță" +#: payments/models.py:95 +msgid "name" +msgstr "nume" + +#: payments/models.py:100 +msgid "default currency" +msgstr "moneda implicită" + +#: payments/models.py:107 +msgid "currencies" +msgstr "valute" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "listă separată prin virgulă a valutelor acceptate de acest gateway," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "valoarea minimă a tranzacției" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "valoarea maximă a tranzacției" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "limită zilnică" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "suma limită zilnică a sumelor tranzacțiilor. 0 înseamnă nicio limită" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "limită lunară" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "limita sumei lunare a sumelor tranzacțiilor. 0 înseamnă nicio limită" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioritate" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "variabile de integrare" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "gateway de plată" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "gateway-uri de plată" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "calea de integrare a gateway-ului nu este setată" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "cale de integrare invalidă: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/ru_RU/LC_MESSAGES/django.mo b/payments/locale/ru_RU/LC_MESSAGES/django.mo index c50cf7066b74462ef0f4443273735e4644defbbc..806a61ac115e129ea1724d3a97cf0986b68146a8 100644 GIT binary patch delta 2177 zcmbV~Piz!b9LHbjQqUF!T115Elk%t3`lknt7Od7_OboXg4~ENhJG7JR%q%-oa1+hS z5=vu{YF1BbJed$q6W6s{+U`c<-8W~GCdPw_7a|vo9Q5;>?ruxanlSC#&&+$j_xtnx z{ciStI#5{Mo%&4i^s^4IPPZxbJp5t{KRnrXrB1PT7K%+RrBpZk4Q_*X;KQ(et5Vxx zHynTm;0SyJJ_%>wgYX*cgk?CaR6*5w*~!LVP#ku4DAfzQ;chqt``}6V7@UGGya@Ne zKj1;QjmzYs2B6qI+u)mU2j4b40Rt#@5!_FFRpCV{h@m9%3zSN3HFyU~A}KZ{^Sy8! z_Q5VV1K)!s$iLe8fKo@{KA1+iQTRS;eogsl_WQ_2621((h_9~mA{8#chv3g}4E_%D zaD+{fvI-^OZMYw%$l8Y*9)cf3xnF@utA2zU{taJ)n(Cw#X}Ab4!NL$Puk2FlMR*p9 zgX@j&Mfd{Wx1a<(h73M@9iqCbKnb)A<@`2GTE~EhpCQPWdKEqa$6yZ(;4GZ&Mt|AZ z#m_Z(1j@yqpbX(EM8PB&NCvbYB23~?_N1bHEJ;AKWG18yGHi!g($Ys+q7YqBkFz8x zd3vS)^2k6mAL+5kEIpJy$uOZ{k{Gz_L73JfEu^rdAZA$|VbOZEm(|W&Bmv-zx2h-WCpOeG!ybhXY_AO4soaF^pI&^$5II1nzpZ3Dw8U37gZ4R{O zH?P`ftm#bHOd?IJH*!NlJGcpZ8U~XSsIi zX6n#WO_^2J%Dc7~Hot@B1}{0s&pBbf+_Uv~MZZzX&D_xD8xxtO_-b4n)NI$x zxBOM&56pL_nw(Y4ay%Db(ria&#jM10W?9Fxa>p!SzdWe1j(F#uSz@gjEo!zRQ;+B4 zqTDgnL1n%)6JyjA|cW)xKUcZSF0d(TDMt$OBg)FX?KI(Kw>yl)AMdM-x zR~1v1vf~-PtLu8;V}%gdN<6t=BSNA|>Cev9!o8Pk*odg)RZoOR@Ro>`L^3=`N5l$o zHcMo~n3~TCT^0ezu&!_#nH#-yU8I$kUm?h3jlpH?%vWoth|R2HjKo#+ P;#c|`7t2rY_@V6|>LUy@ delta 654 zcmX}pO=}ZT6oBC~CYeO@*~CUMhBVdEHefN(E>x8M0BIopgGA9{Y!+@!3+*PWZf=W$ z6*q$7N|+iF1|sOD%PS(d2*rgv1G*JAzGtEy=FD@?<<8u%y~>Z`)^RqxFT`2$JUJrg z$ODHLaruPEP1;plpxz9L+hnZ+lV zV1DswT%h9!Q#i(3_#1CvjajvS7q8+ooWU=sJN$(MEU+3K_ZfBEx4(5MDN>?d!qd2h zU2JO2{4%ET3LU=IAH3$Zf&*j&!LFDi2tA=G@(jsm!Wtz{o+R};{so&3La#=zR\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Транзакция" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Транзакции" @@ -41,31 +41,96 @@ msgstr "Депозит на баланс" msgid "deposit some money to balance" msgstr "Внесите немного денег на баланс" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Заказ на обработку после оплаты" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Детали обработки" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Сумма транзакции должна вписываться в {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Сумма транзакции должна вписываться в " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Баланс" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Балансы" +#: payments/models.py:95 +msgid "name" +msgstr "имя" + +#: payments/models.py:100 +msgid "default currency" +msgstr "валюта по умолчанию" + +#: payments/models.py:107 +msgid "currencies" +msgstr "валюты" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "список валют, поддерживаемых данным шлюзом, разделенный запятыми," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "минимальная сумма транзакции" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "максимальная сумма транзакции" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "суточный лимит" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "суточный лимит сумм транзакций. 0 означает отсутствие лимита" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "месячный лимит" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "месячный лимит сумм транзакций. 0 означает отсутствие лимита" + +#: payments/models.py:134 +msgid "priority" +msgstr "приоритет" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "интеграционные переменные" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "платёжный шлюз" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "платёжные шлюзы" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "путь интеграции шлюза не установлен" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "Неверный путь интеграции: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -129,8 +194,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/payments/locale/sv_SE/LC_MESSAGES/django.mo b/payments/locale/sv_SE/LC_MESSAGES/django.mo index a17ec2909baa3720925ba420494f176d3a84831d..d101219489b1f7691dc12c3cfff436097420c30d 100644 GIT binary patch delta 1891 zcmbW0J!~9B6vxN$#U^JUArAQN> zhV$?UJO`hJkHVX<4BvxOa1$;m)lr`^*u%o#Pz+8@C^ZA8;a+$K&cX}uAy|hAd{99kJOo#X+%xcHxPg3$%siJKfzQDS-d9Zq55VhC9(WZl!Z+d5 z@C$enmXU!k>Io={mib(Um*D;I4Jh|FphVz9xF3EA&%$5eLAam8>u?cvB!urWkPv;N>adh3Z zPwDPNX|}R`R8>tBx3Q5#VL0~9WH1+_Av4aK)exo5pU@^rn=bgr^=X}0HndBNt9H#a z<4`!!?#`8#W`~dJ$OT)&S&Zn033ZJ_E)8f1T~m6cGrHe0S!61)^(t~L6Gzqm-Coki z=fuiMui~_ps>EE25_}$Ub?B%{B6r8F)P?#$`30mW!|7d#cP6pj-%H09iZH8&X(!f& zV(yCt23eG5QD|@O+xdCvTuLhQOxny0GHG;wt7S8d_GU;k?bAg2(BG${h6h;LRXf6>oG{mD?f*_2B zMx&*%rMZHJB-&g00~-3CYX|T9+BVSi(sR;00E(f%<*QBQlCPT&C~^JirI4)xxGbM22t$J>-`|IuRyLP!n9? zINo6vKmO<4ou*=mV4V3p>Z#4*E-s>;$Qx>c7V3Jx*o!^}I!^K^V;+O#mvcHbY#^JE zG~3d|8KiKtD_)t<6VhUJ!61#bO)=DHl7k60Z9=a`i_|OAh_#U}}rpxzi+5TYGz6s9Q@zANa$h)1r QO}iS-IhVGY@8LPeAIJPUX8-^I diff --git a/payments/locale/sv_SE/LC_MESSAGES/django.po b/payments/locale/sv_SE/LC_MESSAGES/django.po index 3da424e9..df250c35 100644 --- a/payments/locale/sv_SE/LC_MESSAGES/django.po +++ b/payments/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Transaktion" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Transaktioner" @@ -41,31 +41,98 @@ msgstr "Insättning till saldo" msgid "deposit some money to balance" msgstr "Sätt in pengar på saldot" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Order att bearbeta efter betald" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Bearbetning av detaljer" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Transaktionsbeloppet måste rymmas inom {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Transaktionsbeloppet måste rymmas inom " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Balans" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Vågskålar" +#: payments/models.py:95 +msgid "name" +msgstr "namn" + +#: payments/models.py:100 +msgid "default currency" +msgstr "standardvaluta" + +#: payments/models.py:107 +msgid "currencies" +msgstr "valutor" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "Kommaseparerad lista över valutor som stöds av denna gateway," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minsta transaktionsbelopp" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "högsta transaktionsbelopp" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "daglig gräns" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"gräns för daglig summa av transaktionernas belopp. 0 betyder ingen gräns" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "månadsgräns" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"månadsgräns för summan av transaktionernas belopp. 0 betyder ingen gräns" + +#: payments/models.py:134 +msgid "priority" +msgstr "prioritet" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "integrationsvariabler" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "Betalningsgateway" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "Betalningsgateways" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "Integrationsvägen för gateway är inte inställd" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "ogiltig integrationsväg: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" diff --git a/payments/locale/th_TH/LC_MESSAGES/django.mo b/payments/locale/th_TH/LC_MESSAGES/django.mo index 026107bfaa8d7e3f088555d6fccd7ef08667ca33..b3dd51af5f456477952535c14e1ba4b2c6ee1ed3 100644 GIT binary patch delta 2505 zcmbu9&rcj>7{}kzZIJ>C7No6|b}YqWX_T6vfmBTmNsaX&{=C$~00T_I>~434)=g^G zR#Ga_co@)7HHr;lFeb`^%zDtolSlmr^!20%e?%`P?ZwaY&hAPJc+fXYKku*SeZJ3+ z?T3f-@%;C@6SIoZ$+w^H%r>QZ;5$|P!^mt`>IwGFLb>y0La8SB6Rd_eU<2H~L#f+f z6Fds{!-wH1co)13cfpTfEiAx3rSj@4CXH-dhw@L`?Z_m%iKtY_`O6VQip?^D={f3?a)BKQu9kRPE$@@I)Rpa@B@Da!Z2 zLD&xK;AMCLhLAtiSfkVtxDO7Ixsz~!>@5)fH2Z&{M$RuK@r!@8#N;si0?LCwz~|vF za258WPEvUt?uEUmloUS&SKv#q8{U6=oRJ~e%Q{zL0S>YL6+Q$9h-MMK0rTScK??dT zJOd>Y%kVMyH5`Do&9TE5;CrmEKoQzW{x8BF_yAlh@i!^K6y{dAkEgnM{-Qo zBv9$;1AJ0W8EsO38PX8tAvKohq(;(M(oB*SsD0*4l%_qSSlcM~l zxd}WT&$-U|r=7qm^j3Yl?S$vqmhWWjtQ|PR*0}2jR(ix5n#g9I)R61=mOqinq_c83 zn6rX0*SAKwdfv_*v%;N;_Q8Lys$tt5&+&%m2Bo<_;l*otG|1X1-yRCwbjm+s*~KLww%JtzDuA0#4WC9%^uF1d447ReEE(4rKcY2EHnfFSO>@56($RX^Z|dlC$y1T& z=8ZY;plow}sM#X(l2x>?l%GHf$wU54<#{)}R(D~r;!7rRmS-hev6#})qwa;j*}|G+ec0I0+C|2=i*zQm2nDOusZ#Bdhp@ikK)&ovnwi$P^^U1coGcnX zeyTuWNCsu340u{G4PCaBO}ws|){u_c^eUV4;_X=cTf5n)(nvar8y43X%!LPPT2BA( zo|+bMrgg)nS`e*?hd25A5Q delta 624 zcmX}pKS)AB9Ki9P`R7@h=AUQLKhlg$2oi#DD513=5~8Kaf(jA`*Gil!*DG5ZqafOh z2pk(D2--rzAzE4-g9!TGQ~KfWeeTYC_kMTROkKrF??K0z5Ch~e*&rv#3mXq&rb}d* zb_x^p5A7l$yha1-=*LHN<0~eyfl)LZ?Rir;LO+E;T){z+lH_RQ88|?G^2K8aTc{WG zI@>Rp=%Js$9L}N_&v73wQO}RML?$tbn-reKRf@T%+6v=t7SaDJ^z(hG(}*+hgnGdi zuH!E*;2MJ_o?;qrI)30h{n1`d12<5ggu^FN#xUv=sA2{mP_OfiN9bd+$@is7W1LEF zv77!&pU4uvA;Z?LsKp9>LIJX$KWE7t7pMMM4gGiobPQQ6?9 Ss)Yh-&Md2EGgd1`@?C#$Yd`@2 diff --git a/payments/locale/th_TH/LC_MESSAGES/django.po b/payments/locale/th_TH/LC_MESSAGES/django.po index 79d7533f..e4734eab 100644 --- a/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/payments/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "ธุรกรรม" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "ธุรกรรม" @@ -41,31 +41,96 @@ msgstr "ฝากเงินเพื่อปรับยอด" msgid "deposit some money to balance" msgstr "ฝากเงินเพื่อปรับยอด" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "คำสั่งซื้อเพื่อดำเนินการหลังจากชำระเงินแล้ว" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "รายละเอียดการประมวลผล" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"จำนวนเงินต้องอยู่ในช่วง {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"จำนวนเงินต้องอยู่ในช่วง " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "สมดุล" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "สเกล" +#: payments/models.py:95 +msgid "name" +msgstr "ชื่อ" + +#: payments/models.py:100 +msgid "default currency" +msgstr "สกุลเงินเริ่มต้น" + +#: payments/models.py:107 +msgid "currencies" +msgstr "สกุลเงิน" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "รายการสกุลเงินที่รองรับโดยเกตเวย์นี้ แยกด้วยเครื่องหมายจุลภาค" + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "จำนวนเงินการทำรายการขั้นต่ำ" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "จำนวนเงินสูงสุดต่อรายการ" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "ขีดจำกัดรายวัน" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "ขีดจำกัดยอดรวมต่อวันของจำนวนเงินธุรกรรม 0 หมายถึงไม่มีขีดจำกัด" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "วงเงินรายเดือน" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "วงเงินรวมรายเดือนของจำนวนธุรกรรม 0 หมายถึงไม่มีขีดจำกัด" + +#: payments/models.py:134 +msgid "priority" +msgstr "ลำดับความสำคัญ" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "ตัวแปรการรวม" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "เกตเวย์การชำระเงิน" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "เกตเวย์การชำระเงิน" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "ไม่ได้ตั้งค่าเส้นทางการรวมเกตเวย์" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "เส้นทางบูรณาการไม่ถูกต้อง: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -128,6 +193,7 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet สำหรับการจัดการการดำเนินการแบบอ่านอย่างเดียวบนโมเดล Transaction " -"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้ " -"TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " -"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ สามารถเข้าถึงธุรกรรมได้" +"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้" +" TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " +"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ " +"สามารถเข้าถึงธุรกรรมได้" diff --git a/payments/locale/tr_TR/LC_MESSAGES/django.mo b/payments/locale/tr_TR/LC_MESSAGES/django.mo index f9ba5b1a89349eacbb4b7d6e8262e8eedb9e9e62..d4207323341fe37e49278aa630a299f9fb655936 100644 GIT binary patch delta 1910 zcmbW0KWtk?9LF!M(~=Zu+O)K#DI7^dLlgcDNMMyBP^Ah~u^_cem$Q9w4!?KLymwA{ z2;l+Lfz^Vkm0^frtcgGj5e#wE4S~b}3sM#k6QT=$Dj_~U$8Ovr1~}#Nxp()wyYKIN zKX(qdr<*_QFTAH{bMz_t#Sx{Rf>(C%k5=EQ)H&u}gA(&aL8(dj6Wk4N!o6_ks8V;q zNq7=Y!PD?8dcnW4v;;zA?+^;@mAQ^lEMaU+UOm6gf6N-=mlcM|( zEWsIgH@pnrge}OQnix~+1Uv%EIQKksaE0_AWqvQ44#Q{RDEF)L3`D?1NHQvd3owHh z;0I6~_#NI0r$|RQ4_|~ucnH1&MZgs(mao8l@H(7_-$QxgQ8vE?r(sj9`jEkKxCX_V zO(+Nc2=9Y`LGD%uQF#_lLy3D8O06VN99n_$B%ec)R$oC8^c|G*HX&xJKVTJ(OyIv1 zg~Rs%14N|y8H$C!L7eNk0($D_pu{{V6Ew;62>mEs(?x(>D(BA9IihE`Bq%lg0A0jN zJ0|ZhO|ls@d1J{|1V~|tLkR9!4sL5=@1V&O$uHvoomy58)5QhJoF7jwb8)lR&O3YQ z6&v*GGdsQ>ITgo7XSQxq6Kq9CE(cH(^;clPf}Sdt?mulyOts<5~blrp{jUb-{atJL`c(*yczHCxwN|DW!^UEf3m4ECm>e)Ft z<&jK9Ni|WidELcm9+KJ@s$%E=bt&;-X)E(Hq#pM_|5x(f#J2TI;rRT(W>q(NY<(Df zXM+g_sY_B9^3?;QR|^+jXlT=I>#AM<$W@#UJn3S$<15DNip_$pMb=v}Ej7C2QWr-y zB`2?!U0PjViz2H{o_0G?-0f_%d!=AAx6ryaHru>?lOo(l>ua_CgSm}%WHGJ5osr=P z&!4^(6q0&m`gP#sy?Yg+^Q5MYXN6#c?8v2x7t2hJ21IY)=~~~8ot_^~4nL#{vYaZ& zlZec7x!T8a+D5yzZ~SU=IHqE|ZB*8*m!y?=WYf&Op@)OyprL{|w^b0etoQ80Id(g@ zs^N}llSkdomMt#_HN3d(OF!m6xZ;q|`egj+;%5~b^Ge&Vtk&dzfKR5C>cInf` delta 630 zcmXxhOG`pQ6u|LgUf-|MEa?GOMkYxK1+|F2fE4r*EHOb7s$Hp@h+1E&jnO7(7l_fO zWgj8hiMWk6L7SjW|8s90oco)ZJI=Xh=61TBX!fGUr4R|)1g%S(rL`P9h@}CMJpCM| z88@6FF}z0)K4S!5(2K8_!7fgr$FSGU<0Ru8MsW+rM4D2dQ)Qx#{N#hjIDVpT7iH=rKMb=6k7w{Bk zu#LL$8)`*8976HiCle(+Fou5e%Q2lJJi`$FpjP0c zJU-k?&Xg6JK$Gi+x|TgxjxQz@VHzZlE)e26}x)(iCjj)Xj z|7p=FJNpjv+?6x~?lp7IePL8;rJDKZNjVNXPVbFjeg{)#E3|I9!Yw1O@Af0B-mBeW NwOA=0bo!AE$1m%*Js1E0 diff --git a/payments/locale/tr_TR/LC_MESSAGES/django.po b/payments/locale/tr_TR/LC_MESSAGES/django.po index 492a9e41..2dcc5ed2 100644 --- a/payments/locale/tr_TR/LC_MESSAGES/django.po +++ b/payments/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "İşlem" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "İşlemler" @@ -41,31 +41,99 @@ msgstr "Bakiyeye yatırma" msgid "deposit some money to balance" msgstr "Bakiye için biraz para yatırın" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Ödeme yapıldıktan sonra işleme alınacak sipariş" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "İşleme ayrıntıları" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"İşlem tutarı {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM} içine sığmalıdır" +"İşlem tutarı " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} içine " +"sığmalıdır" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Denge" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Terazi" +#: payments/models.py:95 +msgid "name" +msgstr "isim" + +#: payments/models.py:100 +msgid "default currency" +msgstr "varsayılan para birimi" + +#: payments/models.py:107 +msgid "currencies" +msgstr "para birimleri" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" +"Bu ağ geçidi tarafından desteklenen para birimlerinin virgülle ayrılmış " +"listesi," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "minimum işlem tutarı" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "maksimum işlem tutarı" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "günlük limit" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "işlem tutarlarının günlük toplam limiti. 0 limit yok anlamına gelir" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "aylık limit" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "işlem tutarlarının aylık toplam limiti. 0 limit yok anlamına gelir" + +#: payments/models.py:134 +msgid "priority" +msgstr "öncelik" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "entegrasyon değişkenleri" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "ödeme ağ geçidi" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "ödeme ağ geçitleri" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "ağ geçidi entegrasyon yolu ayarlanmamış" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "geçersiz entegrasyon yolu: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -95,8 +163,7 @@ 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." #: payments/templates/balance_deposit_email.html:100 diff --git a/payments/locale/vi_VN/LC_MESSAGES/django.mo b/payments/locale/vi_VN/LC_MESSAGES/django.mo index 30520c30c0602dd401779efe20df0b9332e1d2d5..dae9b1b85bf42086ecdc2076c66109a3b5707988 100644 GIT binary patch delta 2015 zcmbW0PiP!f9LHbUP1|IvwoPqJ|JbK#Oxng+l_CwX5DipH4~kWKsE66fbZ6|&%(^q% zx=;vGtfCjgP(`$uSXxab5KTqc1#_5?i)br&@lu$B2)&3snv0*`?rgdcE9hh2eBPhm z`@Qe)_kR1$_8Th55hm;qi{Wk(W3T2v3nxrQFtG73y#15irpOC!Tsu61`@%~P=q8lTLw;fFBG{VHZ4k=%fy>^C?B zZ$sJdLH^V5V<-ZCgb%@Ap$NGHd*CbgHw5`mp5PpO7=8gq;Zi!^K(y~N?}rl-*&Kss zU<~o4mZ7{^2kGd8`=MO$5;WmyC_-;QIrj?`KN~kUxEqSlry#+r!%%AGg>?NSEHk$^ z6Q3B~V&N*hof=Hy?Q!OpAemDF9V6D*+dYTufL%bmJ|~SQDkpbL+?tHB9$n&(y3+j7+s?8rt{~i7xy+; zZ?8Jm*_W+Q&mUTIvu(t64INlTqhy5ExGp$BsQpvgESE}_XF67(gL1Lxmt-?n(V^`G zI*;jDqcW(Yb(!AWT~jq~IE4y6TqjJ&LD_B0#c5bFyudI+$M=GMZMc5f3xgqjK)V(j z+Vh)7ty4z15H>|rqJhkCZ+fYAywJ)c7ALxBgtkVI=ZC})Mn>kniPrryM#(X91uIaF zcg83<%IZ;vNuo#KkqBoc++vw+#)pn3f{>0&`D$eY9iUVFApXx~K2D;?pAiA0DezC<$ z>cWiYIbtu)7`hNo>C<+69aC9t^*yAHw}j{>)$dGHC$;xIJ9@42#OUG&67;2p-mfHt zSyDs>E*G0&r=C}0rOcD+LZ}N#b+$MZUGJPZk&~6?;d(CAzd24lHf|}9`<6<34!P&c zq${krQ8=pUuAA_BTH2DboM| delta 650 zcmXZZODKd<6u|K_=9`BZW5#pj)l3m4M3iQ$SSgXRqL9pF%#_#4Vk9T{va zET(KMEXGn|ZDS>6rMUkd!@B6L><{kzLBluv4er=DG?dr zxfk21x11tXc!3^#z#!((i+POU8%EJ%71niN6Ll|E;waXOY|AVUOH6DcKlx&4z;DzS zmbnUls6jtn0Smr}t#\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "Giao dịch" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "Giao dịch" @@ -41,31 +41,100 @@ msgstr "Gửi tiền vào tài khoản" msgid "deposit some money to balance" msgstr "Gửi một số tiền để cân bằng." -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "Đơn hàng sẽ được xử lý sau khi thanh toán." -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "Chi tiết xử lý" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"Số tiền giao dịch phải nằm trong khoảng {config.PAYMENT_GATEWAY_MINIMUM}-" -"{config.PAYMENT_GATEWAY_MAXIMUM}" +"Số tiền giao dịch phải nằm trong khoảng " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "Cân bằng" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "Cân" +#: payments/models.py:95 +msgid "name" +msgstr "tên" + +#: payments/models.py:100 +msgid "default currency" +msgstr "Tiền tệ mặc định" + +#: payments/models.py:107 +msgid "currencies" +msgstr "tiền tệ" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "" +"Danh sách các loại tiền tệ được hỗ trợ bởi cổng thanh toán này, được phân " +"tách bằng dấu phẩy," + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "Số tiền giao dịch tối thiểu" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "Số tiền giao dịch tối đa" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "giới hạn hàng ngày" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"Giới hạn tổng số tiền giao dịch hàng ngày. 0 có nghĩa là không có giới hạn." + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "giới hạn hàng tháng" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "" +"Giới hạn tổng số tiền giao dịch hàng tháng. 0 có nghĩa là không có giới hạn." + +#: payments/models.py:134 +msgid "priority" +msgstr "ưu tiên" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "biến tích phân" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "cổng thanh toán" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "Cổng thanh toán" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "Đường dẫn tích hợp cổng không được thiết lập." + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "Đường dẫn tích hợp không hợp lệ: %(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -95,8 +164,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." #: payments/templates/balance_deposit_email.html:100 #, python-format diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.mo b/payments/locale/zh_Hans/LC_MESSAGES/django.mo index dc7a9448c6bca40569f0285a08ae5bd91db595cd..37c7d0999b2020e3030f3f339b12a847e1751a92 100644 GIT binary patch delta 1753 zcmbW0U1$_n6vt0=jYeBdjh~G+w_P=<6>A$RG-#m^D3m@379XT9H_5me*qPbx%o-O9 zyQ#@$5jCr0*fot1B|)ieQrHxWF$uo+p{0E*v=nz{cW5EB4}~g1|7T}bSHzcI_U!MT zbM8I&oOAE|vE^1<>er2-F~aD8?0|gIK=ckcu>yY>v6Vz0!S*T0YZgO9Enpd34L$@n zfGbxKtpQuWz2FY;J@5nYRWJjt1#g1uz#`a1l%gd}nqhbVa=>+sL_5J2a3lB@7zVq+ zm%)Be1J8h)!N0)Qz}47{Txc)I>)s6bA^0M61v~_rAg}udY{mKXEhb#Sk02-VJIIy% z9q=K@iG*O}%(sF)U>JM>%z&SPHi#cJHxadi+d&1LdmnrR{RYZ!1*Z{&{|j=Q&1gp& z>;yRm&0)fhdmsn+4djlv0sjF}1U0TF+6Oj+yzVf_SI`Y|oZ|r_f!_jo-|4_U9M~^` z5!kP+NB=oc15O(N*MO|2LB8`55FM=Afa(M70Fe*1u>pf0*LDb3C?K2=Ujsk3-4MP~ z?#3<%zv)*X+rKR+VsA^imI3aoy@wlS*s){MhL@Z{+ z+1Zm6R=;YB2$l}Wmz6EYFCYDpyRj!;)PI8>;*r9_Y{f{2*3`UMiw4GT3`whWz3)%#D% zxGH<1ib<+|QbyIjXLfgq-5ng|b(5k-#2`(cQZ?jUmuiqGX{!EQm!Vtze&yXLT?^Fz zRlF`W#a<5WdZX56ipiv==vGZPYX(f>su5SMWO37~aHz91KkcRS&gg9?oAJgkm&b=H zv(x2;i_UP-y*%rl8)VDe4d=T-C!4QayLmr7Xdi59JL=oWogH=a)83Vwcl|1r?o7D_ z+Z(wE1>1a|o1XXG_tT#r5QtEoy5r_2gDu{Cp)xb&2eUtJ+TZFQ?R}APv$@LcS!Z#` zo%pgcvshl3u?L&3rN-u*T-F&acq60q)T;cXJCu(z TRJvPmhO_R~GsW(;?G66{!$as> delta 647 zcmXZZO(;ZB6u|K_X3Y4Q@jb}*7@9FPMTu-=BO9fZ1zAlAMYE7>Fw*2>LFzS)g~cRg zK{g{PMY6H5Vk=pAC>FLB%KyB1r#bKU&YS!0J@4L==CA6+ONA>XL@n7sK9lX_frAUt znI|&LeHVtQSDhl2c#Iyr!cx4$0(`;Yk%Yv!ndiX@@{=zv z_4tE2p*KJGf**^i!x+PE^kN#9@d$N%z%3HO2u{)XDE?7j(yh*W!60qm5#6jWCO10K zxAj2e7kj9sFxPP}GKY+z?$RXc_(l8wbzGy)ppFX^iTE*$TKA)lAGGUHoTeVvn)T(D zn;moedOG9J89 o!|%(qW;V^6w7gyIzn@;4d%NaQ@?&q~^X$;vN!d@c$&!%cAE@C>y8r+H diff --git a/payments/locale/zh_Hans/LC_MESSAGES/django.po b/payments/locale/zh_Hans/LC_MESSAGES/django.po index dd12d1fc..a3a8ea53 100644 --- a/payments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/payments/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,11 +13,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: payments/admin.py:15 payments/models.py:45 +#: payments/admin.py:17 payments/models.py:65 msgid "transaction" msgstr "交易" -#: payments/admin.py:16 payments/models.py:46 +#: payments/admin.py:18 payments/models.py:66 msgid "transactions" msgstr "交易" @@ -41,31 +41,96 @@ msgstr "余额存款" msgid "deposit some money to balance" msgstr "为余额存入一些钱" -#: payments/models.py:19 +#: payments/models.py:38 msgid "order to process after paid" msgstr "付款后处理订单" -#: payments/models.py:22 +#: payments/models.py:41 msgid "processing details" msgstr "处理细节" -#: payments/models.py:41 +#: payments/models.py:61 #, python-brace-format msgid "" -"transaction amount must fit into {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM}" +"transaction amount must fit into " +"{config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM}" msgstr "" -"交易金额必须符合 {config.PAYMENT_GATEWAY_MINIMUM}-{config." -"PAYMENT_GATEWAY_MAXIMUM} 的规定。" +"交易金额必须符合 {config.PAYMENT_GATEWAY_MINIMUM}-{config.PAYMENT_GATEWAY_MAXIMUM} " +"的规定。" -#: payments/models.py:63 +#: payments/models.py:84 msgid "balance" msgstr "平衡" -#: payments/models.py:64 +#: payments/models.py:85 msgid "balances" msgstr "天平" +#: payments/models.py:95 +msgid "name" +msgstr "名字" + +#: payments/models.py:100 +msgid "default currency" +msgstr "默认货币" + +#: payments/models.py:107 +msgid "currencies" +msgstr "货币" + +#: payments/models.py:109 +msgid "comma separated list of currencies supported by this gateway, " +msgstr "以逗号分隔的该网关支持的货币列表、" + +#: payments/models.py:115 +msgid "minimum transaction amount" +msgstr "最低交易额" + +#: payments/models.py:118 +msgid "maximum transaction amount" +msgstr "最高交易额" + +#: payments/models.py:124 +msgid "daily limit" +msgstr "每日限额" + +#: payments/models.py:125 +msgid "daily sum limit of transactions' amounts. 0 means no limit" +msgstr "交易金额的每日总限额。0 表示无限额" + +#: payments/models.py:131 +msgid "monthly limit" +msgstr "月限额" + +#: payments/models.py:132 +msgid "monthly sum limit of transactions' amounts. 0 means no limit" +msgstr "交易金额的月限额。0 表示无限额" + +#: payments/models.py:134 +msgid "priority" +msgstr "优先权" + +#: payments/models.py:135 +msgid "integration variables" +msgstr "整合变量" + +#: payments/models.py:141 +msgid "payment gateway" +msgstr "支付网关" + +#: payments/models.py:142 +msgid "payment gateways" +msgstr "支付网关" + +#: payments/models.py:178 +msgid "gateway integration path is not set" +msgstr "网关集成路径未设置" + +#: payments/models.py:183 +#, python-format +msgid "invalid integration path: %(path)s" +msgstr "集成路径无效:%(path)s" + #: payments/templates/balance_deposit_email.html:6 #: payments/templates/balance_deposit_email.html:93 msgid "balance deposit" @@ -129,6 +194,5 @@ 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/pyproject.toml b/pyproject.toml index 71daa378..75d48081 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,16 +6,16 @@ authors = [{ name = "fureunoir", email = "contact@fureunoir.com" }] readme = "README.md" requires-python = ">=3.12,<=3.13" dependencies = [ + "aiogram==3.22.0", "aiosmtpd==1.4.6", - "channels>=4.3.1", + "channels==4.3.1", "channels-redis>=4.3.0", "colorlog==6.10.1", - "coverage>=7.11.0", + "coverage==7.11.0", "click==8.3.0", "cryptography==46.0.3", "django==5.2.7", "django-cacheops==7.2", - "django-channels>=0.7.0", "django-constance==4.3.2", "django-cors-headers==4.9.0", "django-dbbackup==5.0.0", @@ -62,14 +62,13 @@ dependencies = [ "python-slugify==8.0.4", "psutil==7.1.2", "psycopg2==2.9.11", - "pydantic==2.12.3", "pymdown-extensions==10.16.1", "redis==7.0.0", "requests==2.32.5", "sentry-sdk[django,celery,opentelemetry]==2.42.1", "six==1.17.0", "swapper==1.4.0", - "uvicorn>=0.38.0", + "uvicorn==0.38.0", "zeep==4.3.2", ] diff --git a/scripts/Docker/app-entrypoint.sh b/scripts/Docker/app-entrypoint.sh index 856bc52a..da7f11f5 100644 --- a/scripts/Docker/app-entrypoint.sh +++ b/scripts/Docker/app-entrypoint.sh @@ -4,16 +4,8 @@ set -e uv run python manage.py await_services if [ "${DEBUG:-0}" = "1" ]; then - uv run gunicorn evibes.wsgi:application \ - --bind 0.0.0.0:8000 \ - --workers 2 \ - --reload \ - --log-level debug \ - --access-logfile - \ - --error-logfile - + uv run uvicorn --host 0.0.0.0 --port 8000 --reload --log-level debug --ws-ping-interval 20 --ws-ping-timeout 20 evibes.asgi:application else - uv run gunicorn evibes.wsgi:application \ - --bind 0.0.0.0:8000 \ - --workers 12 \ - --timeout 120 + UVICORN_WORKERS=${UVICORN_WORKERS:-4} + uv run uvicorn --host 0.0.0.0 --port 8000 --workers "$UVICORN_WORKERS" --proxy-headers --forwarded-allow-ips='*' --ws-ping-interval 20 --ws-ping-timeout 20 evibes.asgi:application fi diff --git a/uv.lock b/uv.lock index 8efd8b1a..fe1df429 100644 --- a/uv.lock +++ b/uv.lock @@ -2,6 +2,105 @@ version = 1 revision = 3 requires-python = ">=3.12, <=3.13" +[[package]] +name = "aiofiles" +version = "24.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" }, +] + +[[package]] +name = "aiogram" +version = "3.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "aiohttp" }, + { name = "certifi" }, + { name = "magic-filter" }, + { name = "pydantic" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/2c/fe0845a97f6126357d20163ede8f76bc161f73122123c6548ca19d9a12c7/aiogram-3.22.0.tar.gz", hash = "sha256:c483f81e37aeea8e7f592c9bd14f6acc80d9b7a2698e296a45bf47ff60a98510", size = 1520414, upload-time = "2025-08-17T16:20:45.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/e5/9f9fae7b50ed502e33121dd62a7e9b076d00630eaafe1dd7fda64f7e8625/aiogram-3.22.0-py3-none-any.whl", hash = "sha256:1c6eceb078ff62cf0556a5466cf3e7e8119678c26cc56803b7ac5f73633934a8", size = 698216, upload-time = "2025-08-17T16:20:43.354Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.12.15" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/e7/d92a237d8802ca88483906c388f7c201bbe96cd80a165ffd0ac2f6a8d59f/aiohttp-3.12.15.tar.gz", hash = "sha256:4fc61385e9c98d72fcdf47e6dd81833f47b2f77c114c29cd64a361be57a763a2", size = 7823716, upload-time = "2025-07-29T05:52:32.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/97/77cb2450d9b35f517d6cf506256bf4f5bda3f93a66b4ad64ba7fc917899c/aiohttp-3.12.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:802d3868f5776e28f7bf69d349c26fc0efadb81676d0afa88ed00d98a26340b7", size = 702333, upload-time = "2025-07-29T05:50:46.507Z" }, + { url = "https://files.pythonhosted.org/packages/83/6d/0544e6b08b748682c30b9f65640d006e51f90763b41d7c546693bc22900d/aiohttp-3.12.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2800614cd560287be05e33a679638e586a2d7401f4ddf99e304d98878c29444", size = 476948, upload-time = "2025-07-29T05:50:48.067Z" }, + { url = "https://files.pythonhosted.org/packages/3a/1d/c8c40e611e5094330284b1aea8a4b02ca0858f8458614fa35754cab42b9c/aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8466151554b593909d30a0a125d638b4e5f3836e5aecde85b66b80ded1cb5b0d", size = 469787, upload-time = "2025-07-29T05:50:49.669Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/b76438e70319796bfff717f325d97ce2e9310f752a267bfdf5192ac6082b/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e5a495cb1be69dae4b08f35a6c4579c539e9b5706f606632102c0f855bcba7c", size = 1716590, upload-time = "2025-07-29T05:50:51.368Z" }, + { url = "https://files.pythonhosted.org/packages/79/b1/60370d70cdf8b269ee1444b390cbd72ce514f0d1cd1a715821c784d272c9/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6404dfc8cdde35c69aaa489bb3542fb86ef215fc70277c892be8af540e5e21c0", size = 1699241, upload-time = "2025-07-29T05:50:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2b/4968a7b8792437ebc12186db31523f541943e99bda8f30335c482bea6879/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ead1c00f8521a5c9070fcb88f02967b1d8a0544e6d85c253f6968b785e1a2ab", size = 1754335, upload-time = "2025-07-29T05:50:55.394Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c1/49524ed553f9a0bec1a11fac09e790f49ff669bcd14164f9fab608831c4d/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6990ef617f14450bc6b34941dba4f12d5613cbf4e33805932f853fbd1cf18bfb", size = 1800491, upload-time = "2025-07-29T05:50:57.202Z" }, + { url = "https://files.pythonhosted.org/packages/de/5e/3bf5acea47a96a28c121b167f5ef659cf71208b19e52a88cdfa5c37f1fcc/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd736ed420f4db2b8148b52b46b88ed038d0354255f9a73196b7bbce3ea97545", size = 1719929, upload-time = "2025-07-29T05:50:59.192Z" }, + { url = "https://files.pythonhosted.org/packages/39/94/8ae30b806835bcd1cba799ba35347dee6961a11bd507db634516210e91d8/aiohttp-3.12.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5092ce14361a73086b90c6efb3948ffa5be2f5b6fbcf52e8d8c8b8848bb97c", size = 1635733, upload-time = "2025-07-29T05:51:01.394Z" }, + { url = "https://files.pythonhosted.org/packages/7a/46/06cdef71dd03acd9da7f51ab3a9107318aee12ad38d273f654e4f981583a/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aaa2234bb60c4dbf82893e934d8ee8dea30446f0647e024074237a56a08c01bd", size = 1696790, upload-time = "2025-07-29T05:51:03.657Z" }, + { url = "https://files.pythonhosted.org/packages/02/90/6b4cfaaf92ed98d0ec4d173e78b99b4b1a7551250be8937d9d67ecb356b4/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6d86a2fbdd14192e2f234a92d3b494dd4457e683ba07e5905a0b3ee25389ac9f", size = 1718245, upload-time = "2025-07-29T05:51:05.911Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e6/2593751670fa06f080a846f37f112cbe6f873ba510d070136a6ed46117c6/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a041e7e2612041a6ddf1c6a33b883be6a421247c7afd47e885969ee4cc58bd8d", size = 1658899, upload-time = "2025-07-29T05:51:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/8f/28/c15bacbdb8b8eb5bf39b10680d129ea7410b859e379b03190f02fa104ffd/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5015082477abeafad7203757ae44299a610e89ee82a1503e3d4184e6bafdd519", size = 1738459, upload-time = "2025-07-29T05:51:09.56Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/c269cbc4faa01fb10f143b1670633a8ddd5b2e1ffd0548f7aa49cb5c70e2/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56822ff5ddfd1b745534e658faba944012346184fbfe732e0d6134b744516eea", size = 1766434, upload-time = "2025-07-29T05:51:11.423Z" }, + { url = "https://files.pythonhosted.org/packages/52/b0/4ff3abd81aa7d929b27d2e1403722a65fc87b763e3a97b3a2a494bfc63bc/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2acbbfff69019d9014508c4ba0401822e8bae5a5fdc3b6814285b71231b60f3", size = 1726045, upload-time = "2025-07-29T05:51:13.689Z" }, + { url = "https://files.pythonhosted.org/packages/71/16/949225a6a2dd6efcbd855fbd90cf476052e648fb011aa538e3b15b89a57a/aiohttp-3.12.15-cp312-cp312-win32.whl", hash = "sha256:d849b0901b50f2185874b9a232f38e26b9b3d4810095a7572eacea939132d4e1", size = 423591, upload-time = "2025-07-29T05:51:15.452Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d8/fa65d2a349fe938b76d309db1a56a75c4fb8cc7b17a398b698488a939903/aiohttp-3.12.15-cp312-cp312-win_amd64.whl", hash = "sha256:b390ef5f62bb508a9d67cb3bba9b8356e23b3996da7062f1a57ce1a79d2b3d34", size = 450266, upload-time = "2025-07-29T05:51:17.239Z" }, + { url = "https://files.pythonhosted.org/packages/f2/33/918091abcf102e39d15aba2476ad9e7bd35ddb190dcdd43a854000d3da0d/aiohttp-3.12.15-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f922ffd05034d439dde1c77a20461cf4a1b0831e6caa26151fe7aa8aaebc315", size = 696741, upload-time = "2025-07-29T05:51:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/7495a81e39a998e400f3ecdd44a62107254803d1681d9189be5c2e4530cd/aiohttp-3.12.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ee8a8ac39ce45f3e55663891d4b1d15598c157b4d494a4613e704c8b43112cd", size = 474407, upload-time = "2025-07-29T05:51:21.165Z" }, + { url = "https://files.pythonhosted.org/packages/49/fc/a9576ab4be2dcbd0f73ee8675d16c707cfc12d5ee80ccf4015ba543480c9/aiohttp-3.12.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3eae49032c29d356b94eee45a3f39fdf4b0814b397638c2f718e96cfadf4c4e4", size = 466703, upload-time = "2025-07-29T05:51:22.948Z" }, + { url = "https://files.pythonhosted.org/packages/09/2f/d4bcc8448cf536b2b54eed48f19682031ad182faa3a3fee54ebe5b156387/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97752ff12cc12f46a9b20327104448042fce5c33a624f88c18f66f9368091c7", size = 1705532, upload-time = "2025-07-29T05:51:25.211Z" }, + { url = "https://files.pythonhosted.org/packages/f1/f3/59406396083f8b489261e3c011aa8aee9df360a96ac8fa5c2e7e1b8f0466/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:894261472691d6fe76ebb7fcf2e5870a2ac284c7406ddc95823c8598a1390f0d", size = 1686794, upload-time = "2025-07-29T05:51:27.145Z" }, + { url = "https://files.pythonhosted.org/packages/dc/71/164d194993a8d114ee5656c3b7ae9c12ceee7040d076bf7b32fb98a8c5c6/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fa5d9eb82ce98959fc1031c28198b431b4d9396894f385cb63f1e2f3f20ca6b", size = 1738865, upload-time = "2025-07-29T05:51:29.366Z" }, + { url = "https://files.pythonhosted.org/packages/1c/00/d198461b699188a93ead39cb458554d9f0f69879b95078dce416d3209b54/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fa751efb11a541f57db59c1dd821bec09031e01452b2b6217319b3a1f34f3d", size = 1788238, upload-time = "2025-07-29T05:51:31.285Z" }, + { url = "https://files.pythonhosted.org/packages/85/b8/9e7175e1fa0ac8e56baa83bf3c214823ce250d0028955dfb23f43d5e61fd/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5346b93e62ab51ee2a9d68e8f73c7cf96ffb73568a23e683f931e52450e4148d", size = 1710566, upload-time = "2025-07-29T05:51:33.219Z" }, + { url = "https://files.pythonhosted.org/packages/59/e4/16a8eac9df39b48ae102ec030fa9f726d3570732e46ba0c592aeeb507b93/aiohttp-3.12.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:049ec0360f939cd164ecbfd2873eaa432613d5e77d6b04535e3d1fbae5a9e645", size = 1624270, upload-time = "2025-07-29T05:51:35.195Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/cd84dee7b6ace0740908fd0af170f9fab50c2a41ccbc3806aabcb1050141/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b52dcf013b57464b6d1e51b627adfd69a8053e84b7103a7cd49c030f9ca44461", size = 1677294, upload-time = "2025-07-29T05:51:37.215Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/d0f1f85e50d401eccd12bf85c46ba84f947a84839c8a1c2c5f6e8ab1eb50/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9b2af240143dd2765e0fb661fd0361a1b469cab235039ea57663cda087250ea9", size = 1708958, upload-time = "2025-07-29T05:51:39.328Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6b/f6fa6c5790fb602538483aa5a1b86fcbad66244997e5230d88f9412ef24c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac77f709a2cde2cc71257ab2d8c74dd157c67a0558a0d2799d5d571b4c63d44d", size = 1651553, upload-time = "2025-07-29T05:51:41.356Z" }, + { url = "https://files.pythonhosted.org/packages/04/36/a6d36ad545fa12e61d11d1932eef273928b0495e6a576eb2af04297fdd3c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:47f6b962246f0a774fbd3b6b7be25d59b06fdb2f164cf2513097998fc6a29693", size = 1727688, upload-time = "2025-07-29T05:51:43.452Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c8/f195e5e06608a97a4e52c5d41c7927301bf757a8e8bb5bbf8cef6c314961/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:760fb7db442f284996e39cf9915a94492e1896baac44f06ae551974907922b64", size = 1761157, upload-time = "2025-07-29T05:51:45.643Z" }, + { url = "https://files.pythonhosted.org/packages/05/6a/ea199e61b67f25ba688d3ce93f63b49b0a4e3b3d380f03971b4646412fc6/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad702e57dc385cae679c39d318def49aef754455f237499d5b99bea4ef582e51", size = 1710050, upload-time = "2025-07-29T05:51:48.203Z" }, + { url = "https://files.pythonhosted.org/packages/b4/2e/ffeb7f6256b33635c29dbed29a22a723ff2dd7401fff42ea60cf2060abfb/aiohttp-3.12.15-cp313-cp313-win32.whl", hash = "sha256:f813c3e9032331024de2eb2e32a88d86afb69291fbc37a3a3ae81cc9917fb3d0", size = 422647, upload-time = "2025-07-29T05:51:50.718Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8e/78ee35774201f38d5e1ba079c9958f7629b1fd079459aea9467441dbfbf5/aiohttp-3.12.15-cp313-cp313-win_amd64.whl", hash = "sha256:1a649001580bdb37c6fdb1bebbd7e3bc688e8ec2b5c6f52edbb664662b17dc84", size = 449067, upload-time = "2025-07-29T05:51:52.549Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + [[package]] name = "aiosmtpd" version = "1.4.6" @@ -725,20 +824,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2c/da/70f0f3c5364735344c4bc89e53413bcaae95b4fc1de4e98a7a3b9fb70c88/django_celery_results-2.6.0-py3-none-any.whl", hash = "sha256:b9ccdca2695b98c7cbbb8dea742311ba9a92773d71d7b4944a676e69a7df1c73", size = 38351, upload-time = "2025-04-10T08:23:49.965Z" }, ] -[[package]] -name = "django-channels" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "requests" }, - { name = "requests-oauthlib" }, - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c2/c2/0fdebf20672aa4b007d43e6563cf7c9e3e32a3700ba548eeefdc7a84211c/django-channels-0.7.0.tar.gz", hash = "sha256:c8bc623df4a7828c2e5ea453d0d0f066ff9b71b8c7c1a58b2f7fa86bc0bd619e", size = 5718, upload-time = "2016-10-04T07:49:48.797Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/2d/b8bfeda52e60495b73cc58ac30b676fc9a39008f0c9b68a0eb529768244b/django_channels-0.7.0-py3-none-any.whl", hash = "sha256:ceb5675ed0133bd54cc0529eb76157cc3b9ab67aceba7293ee5ac2fe4126987b", size = 9487, upload-time = "2016-10-04T07:51:31.322Z" }, -] - [[package]] name = "django-constance" version = "4.3.2" @@ -1213,6 +1298,7 @@ name = "evibes" version = "3.1.0" source = { virtual = "." } dependencies = [ + { name = "aiogram" }, { name = "aiosmtpd" }, { name = "channels" }, { name = "channels-redis" }, @@ -1222,7 +1308,6 @@ dependencies = [ { name = "cryptography" }, { name = "django" }, { name = "django-cacheops" }, - { name = "django-channels" }, { name = "django-constance" }, { name = "django-cors-headers" }, { name = "django-dbbackup" }, @@ -1267,7 +1352,6 @@ dependencies = [ { name = "polib" }, { name = "psutil" }, { name = "psycopg2" }, - { name = "pydantic" }, { name = "pyjwt" }, { name = "pymdown-extensions" }, { name = "python-slugify" }, @@ -1337,21 +1421,21 @@ testing = [ [package.metadata] requires-dist = [ + { name = "aiogram", specifier = "==3.22.0" }, { name = "aiosmtpd", specifier = "==1.4.6" }, { name = "celery", marker = "extra == 'worker'", specifier = "==5.5.3" }, { name = "celery-prometheus-exporter", marker = "extra == 'worker'", specifier = "==1.7.0" }, - { name = "channels", specifier = ">=4.3.1" }, + { name = "channels", specifier = "==4.3.1" }, { name = "channels-redis", specifier = ">=4.3.0" }, { name = "click", specifier = "==8.3.0" }, { name = "colorlog", specifier = "==6.10.1" }, - { name = "coverage", specifier = ">=7.11.0" }, + { name = "coverage", specifier = "==7.11.0" }, { name = "coverage", marker = "extra == 'testing'", specifier = "==7.11.0" }, { name = "cryptography", specifier = "==46.0.3" }, { name = "django", specifier = "==5.2.7" }, { name = "django-cacheops", specifier = "==7.2" }, { name = "django-celery-beat", marker = "extra == 'worker'", specifier = "==2.8.1" }, { name = "django-celery-results", marker = "extra == 'worker'", specifier = "==2.6.0" }, - { name = "django-channels", specifier = ">=0.7.0" }, { name = "django-constance", specifier = "==4.3.2" }, { name = "django-cors-headers", specifier = "==4.9.0" }, { name = "django-dbbackup", specifier = "==5.0.0" }, @@ -1399,7 +1483,6 @@ requires-dist = [ { name = "polib", specifier = "==1.2.0" }, { name = "psutil", specifier = "==7.1.2" }, { name = "psycopg2", specifier = "==2.9.11" }, - { name = "pydantic", specifier = "==2.12.3" }, { name = "pygraphviz", marker = "sys_platform != 'win32' and extra == 'graph'", specifier = "==1.14" }, { name = "pyjwt", specifier = "==2.10.1" }, { name = "pymdown-extensions", specifier = "==10.16.1" }, @@ -1413,7 +1496,7 @@ requires-dist = [ { name = "sphinx", marker = "extra == 'docs'", specifier = "==8.2.3" }, { name = "sphinx-rtd-theme", marker = "extra == 'docs'", specifier = "==3.0.2" }, { name = "swapper", specifier = "==1.4.0" }, - { name = "uvicorn", specifier = ">=0.38.0" }, + { name = "uvicorn", specifier = "==0.38.0" }, { name = "zeep", specifier = "==4.3.2" }, ] provides-extras = ["testing", "graph", "worker", "openai", "jupyter", "docs"] @@ -1491,6 +1574,63 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload-time = "2021-03-11T07:16:28.351Z" }, ] +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + [[package]] name = "funcy" version = "2.0" @@ -2187,6 +2327,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a9/50/5b1d70de548fb1e11e15ea9ebec0480365462d202f98b66ad7e154284327/m2r2-0.3.4-py3-none-any.whl", hash = "sha256:1a445514af8a229496bfb1380c52da8dd38313e48600359ee92b2c9d2e4df34a", size = 11199, upload-time = "2025-05-01T16:55:51.87Z" }, ] +[[package]] +name = "magic-filter" +version = "1.0.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/08/da7c2cc7398cc0376e8da599d6330a437c01d3eace2f2365f300e0f3f758/magic_filter-1.0.12.tar.gz", hash = "sha256:4751d0b579a5045d1dc250625c4c508c18c3def5ea6afaf3957cb4530d03f7f9", size = 11071, upload-time = "2023-10-01T12:33:19.006Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/75/f620449f0056eff0ec7c1b1e088f71068eb4e47a46eb54f6c065c6ad7675/magic_filter-1.0.12-py3-none-any.whl", hash = "sha256:e5929e544f310c2b1f154318db8c5cdf544dd658efa998172acd2e4ba0f6c6a6", size = 11335, upload-time = "2023-10-01T12:33:17.711Z" }, +] + [[package]] name = "markdown" version = "3.9" @@ -2305,6 +2454,69 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118, upload-time = "2025-10-08T09:15:23.402Z" }, ] +[[package]] +name = "multidict" +version = "6.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/1e/5492c365f222f907de1039b91f922b93fa4f764c713ee858d235495d8f50/multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5", size = 101834, upload-time = "2025-10-06T14:52:30.657Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/9e/9f61ac18d9c8b475889f32ccfa91c9f59363480613fc807b6e3023d6f60b/multidict-6.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8a3862568a36d26e650a19bb5cbbba14b71789032aebc0423f8cc5f150730184", size = 76877, upload-time = "2025-10-06T14:49:20.884Z" }, + { url = "https://files.pythonhosted.org/packages/38/6f/614f09a04e6184f8824268fce4bc925e9849edfa654ddd59f0b64508c595/multidict-6.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:960c60b5849b9b4f9dcc9bea6e3626143c252c74113df2c1540aebce70209b45", size = 45467, upload-time = "2025-10-06T14:49:22.054Z" }, + { url = "https://files.pythonhosted.org/packages/b3/93/c4f67a436dd026f2e780c433277fff72be79152894d9fc36f44569cab1a6/multidict-6.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2049be98fb57a31b4ccf870bf377af2504d4ae35646a19037ec271e4c07998aa", size = 43834, upload-time = "2025-10-06T14:49:23.566Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f5/013798161ca665e4a422afbc5e2d9e4070142a9ff8905e482139cd09e4d0/multidict-6.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0934f3843a1860dd465d38895c17fce1f1cb37295149ab05cd1b9a03afacb2a7", size = 250545, upload-time = "2025-10-06T14:49:24.882Z" }, + { url = "https://files.pythonhosted.org/packages/71/2f/91dbac13e0ba94669ea5119ba267c9a832f0cb65419aca75549fcf09a3dc/multidict-6.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3e34f3a1b8131ba06f1a73adab24f30934d148afcd5f5de9a73565a4404384e", size = 258305, upload-time = "2025-10-06T14:49:26.778Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b0/754038b26f6e04488b48ac621f779c341338d78503fb45403755af2df477/multidict-6.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:efbb54e98446892590dc2458c19c10344ee9a883a79b5cec4bc34d6656e8d546", size = 242363, upload-time = "2025-10-06T14:49:28.562Z" }, + { url = "https://files.pythonhosted.org/packages/87/15/9da40b9336a7c9fa606c4cf2ed80a649dffeb42b905d4f63a1d7eb17d746/multidict-6.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a35c5fc61d4f51eb045061e7967cfe3123d622cd500e8868e7c0c592a09fedc4", size = 268375, upload-time = "2025-10-06T14:49:29.96Z" }, + { url = "https://files.pythonhosted.org/packages/82/72/c53fcade0cc94dfaad583105fd92b3a783af2091eddcb41a6d5a52474000/multidict-6.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29fe6740ebccba4175af1b9b87bf553e9c15cd5868ee967e010efcf94e4fd0f1", size = 269346, upload-time = "2025-10-06T14:49:31.404Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e2/9baffdae21a76f77ef8447f1a05a96ec4bc0a24dae08767abc0a2fe680b8/multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:123e2a72e20537add2f33a79e605f6191fba2afda4cbb876e35c1a7074298a7d", size = 256107, upload-time = "2025-10-06T14:49:32.974Z" }, + { url = "https://files.pythonhosted.org/packages/3c/06/3f06f611087dc60d65ef775f1fb5aca7c6d61c6db4990e7cda0cef9b1651/multidict-6.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b284e319754366c1aee2267a2036248b24eeb17ecd5dc16022095e747f2f4304", size = 253592, upload-time = "2025-10-06T14:49:34.52Z" }, + { url = "https://files.pythonhosted.org/packages/20/24/54e804ec7945b6023b340c412ce9c3f81e91b3bf5fa5ce65558740141bee/multidict-6.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:803d685de7be4303b5a657b76e2f6d1240e7e0a8aa2968ad5811fa2285553a12", size = 251024, upload-time = "2025-10-06T14:49:35.956Z" }, + { url = "https://files.pythonhosted.org/packages/14/48/011cba467ea0b17ceb938315d219391d3e421dfd35928e5dbdc3f4ae76ef/multidict-6.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c04a328260dfd5db8c39538f999f02779012268f54614902d0afc775d44e0a62", size = 251484, upload-time = "2025-10-06T14:49:37.631Z" }, + { url = "https://files.pythonhosted.org/packages/0d/2f/919258b43bb35b99fa127435cfb2d91798eb3a943396631ef43e3720dcf4/multidict-6.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8a19cdb57cd3df4cd865849d93ee14920fb97224300c88501f16ecfa2604b4e0", size = 263579, upload-time = "2025-10-06T14:49:39.502Z" }, + { url = "https://files.pythonhosted.org/packages/31/22/a0e884d86b5242b5a74cf08e876bdf299e413016b66e55511f7a804a366e/multidict-6.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b2fd74c52accced7e75de26023b7dccee62511a600e62311b918ec5c168fc2a", size = 259654, upload-time = "2025-10-06T14:49:41.32Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/17e10e1b5c5f5a40f2fcbb45953c9b215f8a4098003915e46a93f5fcaa8f/multidict-6.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3e8bfdd0e487acf992407a140d2589fe598238eaeffa3da8448d63a63cd363f8", size = 251511, upload-time = "2025-10-06T14:49:46.021Z" }, + { url = "https://files.pythonhosted.org/packages/e3/9a/201bb1e17e7af53139597069c375e7b0dcbd47594604f65c2d5359508566/multidict-6.7.0-cp312-cp312-win32.whl", hash = "sha256:dd32a49400a2c3d52088e120ee00c1e3576cbff7e10b98467962c74fdb762ed4", size = 41895, upload-time = "2025-10-06T14:49:48.718Z" }, + { url = "https://files.pythonhosted.org/packages/46/e2/348cd32faad84eaf1d20cce80e2bb0ef8d312c55bca1f7fa9865e7770aaf/multidict-6.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:92abb658ef2d7ef22ac9f8bb88e8b6c3e571671534e029359b6d9e845923eb1b", size = 46073, upload-time = "2025-10-06T14:49:50.28Z" }, + { url = "https://files.pythonhosted.org/packages/25/ec/aad2613c1910dce907480e0c3aa306905830f25df2e54ccc9dea450cb5aa/multidict-6.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:490dab541a6a642ce1a9d61a4781656b346a55c13038f0b1244653828e3a83ec", size = 43226, upload-time = "2025-10-06T14:49:52.304Z" }, + { url = "https://files.pythonhosted.org/packages/d2/86/33272a544eeb36d66e4d9a920602d1a2f57d4ebea4ef3cdfe5a912574c95/multidict-6.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:bee7c0588aa0076ce77c0ea5d19a68d76ad81fcd9fe8501003b9a24f9d4000f6", size = 76135, upload-time = "2025-10-06T14:49:54.26Z" }, + { url = "https://files.pythonhosted.org/packages/91/1c/eb97db117a1ebe46d457a3d235a7b9d2e6dcab174f42d1b67663dd9e5371/multidict-6.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7ef6b61cad77091056ce0e7ce69814ef72afacb150b7ac6a3e9470def2198159", size = 45117, upload-time = "2025-10-06T14:49:55.82Z" }, + { url = "https://files.pythonhosted.org/packages/f1/d8/6c3442322e41fb1dd4de8bd67bfd11cd72352ac131f6368315617de752f1/multidict-6.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c0359b1ec12b1d6849c59f9d319610b7f20ef990a6d454ab151aa0e3b9f78ca", size = 43472, upload-time = "2025-10-06T14:49:57.048Z" }, + { url = "https://files.pythonhosted.org/packages/75/3f/e2639e80325af0b6c6febdf8e57cc07043ff15f57fa1ef808f4ccb5ac4cd/multidict-6.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cd240939f71c64bd658f186330603aac1a9a81bf6273f523fca63673cb7378a8", size = 249342, upload-time = "2025-10-06T14:49:58.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/cc/84e0585f805cbeaa9cbdaa95f9a3d6aed745b9d25700623ac89a6ecff400/multidict-6.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a60a4d75718a5efa473ebd5ab685786ba0c67b8381f781d1be14da49f1a2dc60", size = 257082, upload-time = "2025-10-06T14:49:59.89Z" }, + { url = "https://files.pythonhosted.org/packages/b0/9c/ac851c107c92289acbbf5cfb485694084690c1b17e555f44952c26ddc5bd/multidict-6.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53a42d364f323275126aff81fb67c5ca1b7a04fda0546245730a55c8c5f24bc4", size = 240704, upload-time = "2025-10-06T14:50:01.485Z" }, + { url = "https://files.pythonhosted.org/packages/50/cc/5f93e99427248c09da95b62d64b25748a5f5c98c7c2ab09825a1d6af0e15/multidict-6.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3b29b980d0ddbecb736735ee5bef69bb2ddca56eff603c86f3f29a1128299b4f", size = 266355, upload-time = "2025-10-06T14:50:02.955Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0c/2ec1d883ceb79c6f7f6d7ad90c919c898f5d1c6ea96d322751420211e072/multidict-6.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f8a93b1c0ed2d04b97a5e9336fd2d33371b9a6e29ab7dd6503d63407c20ffbaf", size = 267259, upload-time = "2025-10-06T14:50:04.446Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2d/f0b184fa88d6630aa267680bdb8623fb69cb0d024b8c6f0d23f9a0f406d3/multidict-6.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ff96e8815eecacc6645da76c413eb3b3d34cfca256c70b16b286a687d013c32", size = 254903, upload-time = "2025-10-06T14:50:05.98Z" }, + { url = "https://files.pythonhosted.org/packages/06/c9/11ea263ad0df7dfabcad404feb3c0dd40b131bc7f232d5537f2fb1356951/multidict-6.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7516c579652f6a6be0e266aec0acd0db80829ca305c3d771ed898538804c2036", size = 252365, upload-time = "2025-10-06T14:50:07.511Z" }, + { url = "https://files.pythonhosted.org/packages/41/88/d714b86ee2c17d6e09850c70c9d310abac3d808ab49dfa16b43aba9d53fd/multidict-6.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:040f393368e63fb0f3330e70c26bfd336656bed925e5cbe17c9da839a6ab13ec", size = 250062, upload-time = "2025-10-06T14:50:09.074Z" }, + { url = "https://files.pythonhosted.org/packages/15/fe/ad407bb9e818c2b31383f6131ca19ea7e35ce93cf1310fce69f12e89de75/multidict-6.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b3bc26a951007b1057a1c543af845f1c7e3e71cc240ed1ace7bf4484aa99196e", size = 249683, upload-time = "2025-10-06T14:50:10.714Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a4/a89abdb0229e533fb925e7c6e5c40201c2873efebc9abaf14046a4536ee6/multidict-6.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7b022717c748dd1992a83e219587aabe45980d88969f01b316e78683e6285f64", size = 261254, upload-time = "2025-10-06T14:50:12.28Z" }, + { url = "https://files.pythonhosted.org/packages/8d/aa/0e2b27bd88b40a4fb8dc53dd74eecac70edaa4c1dd0707eb2164da3675b3/multidict-6.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9600082733859f00d79dee64effc7aef1beb26adb297416a4ad2116fd61374bd", size = 257967, upload-time = "2025-10-06T14:50:14.16Z" }, + { url = "https://files.pythonhosted.org/packages/d0/8e/0c67b7120d5d5f6d874ed85a085f9dc770a7f9d8813e80f44a9fec820bb7/multidict-6.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94218fcec4d72bc61df51c198d098ce2b378e0ccbac41ddbed5ef44092913288", size = 250085, upload-time = "2025-10-06T14:50:15.639Z" }, + { url = "https://files.pythonhosted.org/packages/ba/55/b73e1d624ea4b8fd4dd07a3bb70f6e4c7c6c5d9d640a41c6ffe5cdbd2a55/multidict-6.7.0-cp313-cp313-win32.whl", hash = "sha256:a37bd74c3fa9d00be2d7b8eca074dc56bd8077ddd2917a839bd989612671ed17", size = 41713, upload-time = "2025-10-06T14:50:17.066Z" }, + { url = "https://files.pythonhosted.org/packages/32/31/75c59e7d3b4205075b4c183fa4ca398a2daf2303ddf616b04ae6ef55cffe/multidict-6.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:30d193c6cc6d559db42b6bcec8a5d395d34d60c9877a0b71ecd7c204fcf15390", size = 45915, upload-time = "2025-10-06T14:50:18.264Z" }, + { url = "https://files.pythonhosted.org/packages/31/2a/8987831e811f1184c22bc2e45844934385363ee61c0a2dcfa8f71b87e608/multidict-6.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:ea3334cabe4d41b7ccd01e4d349828678794edbc2d3ae97fc162a3312095092e", size = 43077, upload-time = "2025-10-06T14:50:19.853Z" }, + { url = "https://files.pythonhosted.org/packages/e8/68/7b3a5170a382a340147337b300b9eb25a9ddb573bcdfff19c0fa3f31ffba/multidict-6.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ad9ce259f50abd98a1ca0aa6e490b58c316a0fce0617f609723e40804add2c00", size = 83114, upload-time = "2025-10-06T14:50:21.223Z" }, + { url = "https://files.pythonhosted.org/packages/55/5c/3fa2d07c84df4e302060f555bbf539310980362236ad49f50eeb0a1c1eb9/multidict-6.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07f5594ac6d084cbb5de2df218d78baf55ef150b91f0ff8a21cc7a2e3a5a58eb", size = 48442, upload-time = "2025-10-06T14:50:22.871Z" }, + { url = "https://files.pythonhosted.org/packages/fc/56/67212d33239797f9bd91962bb899d72bb0f4c35a8652dcdb8ed049bef878/multidict-6.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0591b48acf279821a579282444814a2d8d0af624ae0bc600aa4d1b920b6e924b", size = 46885, upload-time = "2025-10-06T14:50:24.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/d1/908f896224290350721597a61a69cd19b89ad8ee0ae1f38b3f5cd12ea2ac/multidict-6.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:749a72584761531d2b9467cfbdfd29487ee21124c304c4b6cb760d8777b27f9c", size = 242588, upload-time = "2025-10-06T14:50:25.716Z" }, + { url = "https://files.pythonhosted.org/packages/ab/67/8604288bbd68680eee0ab568fdcb56171d8b23a01bcd5cb0c8fedf6e5d99/multidict-6.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b4c3d199f953acd5b446bf7c0de1fe25d94e09e79086f8dc2f48a11a129cdf1", size = 249966, upload-time = "2025-10-06T14:50:28.192Z" }, + { url = "https://files.pythonhosted.org/packages/20/33/9228d76339f1ba51e3efef7da3ebd91964d3006217aae13211653193c3ff/multidict-6.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9fb0211dfc3b51efea2f349ec92c114d7754dd62c01f81c3e32b765b70c45c9b", size = 228618, upload-time = "2025-10-06T14:50:29.82Z" }, + { url = "https://files.pythonhosted.org/packages/f8/2d/25d9b566d10cab1c42b3b9e5b11ef79c9111eaf4463b8c257a3bd89e0ead/multidict-6.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a027ec240fe73a8d6281872690b988eed307cd7d91b23998ff35ff577ca688b5", size = 257539, upload-time = "2025-10-06T14:50:31.731Z" }, + { url = "https://files.pythonhosted.org/packages/b6/b1/8d1a965e6637fc33de3c0d8f414485c2b7e4af00f42cab3d84e7b955c222/multidict-6.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1d964afecdf3a8288789df2f5751dc0a8261138c3768d9af117ed384e538fad", size = 256345, upload-time = "2025-10-06T14:50:33.26Z" }, + { url = "https://files.pythonhosted.org/packages/ba/0c/06b5a8adbdeedada6f4fb8d8f193d44a347223b11939b42953eeb6530b6b/multidict-6.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:caf53b15b1b7df9fbd0709aa01409000a2b4dd03a5f6f5cc548183c7c8f8b63c", size = 247934, upload-time = "2025-10-06T14:50:34.808Z" }, + { url = "https://files.pythonhosted.org/packages/8f/31/b2491b5fe167ca044c6eb4b8f2c9f3b8a00b24c432c365358eadac5d7625/multidict-6.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:654030da3197d927f05a536a66186070e98765aa5142794c9904555d3a9d8fb5", size = 245243, upload-time = "2025-10-06T14:50:36.436Z" }, + { url = "https://files.pythonhosted.org/packages/61/1a/982913957cb90406c8c94f53001abd9eafc271cb3e70ff6371590bec478e/multidict-6.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2090d3718829d1e484706a2f525e50c892237b2bf9b17a79b059cb98cddc2f10", size = 235878, upload-time = "2025-10-06T14:50:37.953Z" }, + { url = "https://files.pythonhosted.org/packages/be/c0/21435d804c1a1cf7a2608593f4d19bca5bcbd7a81a70b253fdd1c12af9c0/multidict-6.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2d2cfeec3f6f45651b3d408c4acec0ebf3daa9bc8a112a084206f5db5d05b754", size = 243452, upload-time = "2025-10-06T14:50:39.574Z" }, + { url = "https://files.pythonhosted.org/packages/54/0a/4349d540d4a883863191be6eb9a928846d4ec0ea007d3dcd36323bb058ac/multidict-6.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4ef089f985b8c194d341eb2c24ae6e7408c9a0e2e5658699c92f497437d88c3c", size = 252312, upload-time = "2025-10-06T14:50:41.612Z" }, + { url = "https://files.pythonhosted.org/packages/26/64/d5416038dbda1488daf16b676e4dbfd9674dde10a0cc8f4fc2b502d8125d/multidict-6.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e93a0617cd16998784bf4414c7e40f17a35d2350e5c6f0bd900d3a8e02bd3762", size = 246935, upload-time = "2025-10-06T14:50:43.972Z" }, + { url = "https://files.pythonhosted.org/packages/9f/8c/8290c50d14e49f35e0bd4abc25e1bc7711149ca9588ab7d04f886cdf03d9/multidict-6.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0feece2ef8ebc42ed9e2e8c78fc4aa3cf455733b507c09ef7406364c94376c6", size = 243385, upload-time = "2025-10-06T14:50:45.648Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a0/f83ae75e42d694b3fbad3e047670e511c138be747bc713cf1b10d5096416/multidict-6.7.0-cp313-cp313t-win32.whl", hash = "sha256:19a1d55338ec1be74ef62440ca9e04a2f001a04d0cc49a4983dc320ff0f3212d", size = 47777, upload-time = "2025-10-06T14:50:47.154Z" }, + { url = "https://files.pythonhosted.org/packages/dc/80/9b174a92814a3830b7357307a792300f42c9e94664b01dee8e457551fa66/multidict-6.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3da4fb467498df97e986af166b12d01f05d2e04f978a9c1c680ea1988e0bc4b6", size = 53104, upload-time = "2025-10-06T14:50:48.851Z" }, + { url = "https://files.pythonhosted.org/packages/cc/28/04baeaf0428d95bb7a7bea0e691ba2f31394338ba424fb0679a9ed0f4c09/multidict-6.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:b4121773c49a0776461f4a904cdf6264c88e42218aaa8407e803ca8025872792", size = 45503, upload-time = "2025-10-06T14:50:50.16Z" }, + { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, +] + [[package]] name = "mypy" version = "1.18.2" @@ -2444,15 +2656,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, ] -[[package]] -name = "oauthlib" -version = "3.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, -] - [[package]] name = "openai" version = "2.6.1" @@ -2730,6 +2933,60 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, ] +[[package]] +name = "propcache" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, + { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, + { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, + { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, + { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, + { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, + { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, + { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, + { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, + { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" }, + { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" }, + { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" }, + { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" }, + { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" }, + { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" }, + { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" }, + { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" }, + { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" }, + { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" }, + { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" }, + { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" }, + { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" }, + { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" }, + { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" }, + { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" }, + { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" }, + { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" }, + { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, + { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" }, + { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" }, + { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" }, + { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" }, + { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, + { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, +] + [[package]] name = "psutil" version = "7.1.2" @@ -2789,7 +3046,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.12.3" +version = "2.11.10" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -2797,57 +3054,51 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f3/1e/4f0a3233767010308f2fd6bd0814597e3f63f1dc98304a9112b8759df4ff/pydantic-2.12.3.tar.gz", hash = "sha256:1da1c82b0fc140bb0103bc1441ffe062154c8d38491189751ee00fd8ca65ce74", size = 819383, upload-time = "2025-10-17T15:04:21.222Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/54/ecab642b3bed45f7d5f59b38443dcb36ef50f85af192e6ece103dbfe9587/pydantic-2.11.10.tar.gz", hash = "sha256:dc280f0982fbda6c38fada4e476dc0a4f3aeaf9c6ad4c28df68a666ec3c61423", size = 788494, upload-time = "2025-10-04T10:40:41.338Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/6b/83661fa77dcefa195ad5f8cd9af3d1a7450fd57cc883ad04d65446ac2029/pydantic-2.12.3-py3-none-any.whl", hash = "sha256:6986454a854bc3bc6e5443e1369e06a3a456af9d339eda45510f517d9ea5c6bf", size = 462431, upload-time = "2025-10-17T15:04:19.346Z" }, + { url = "https://files.pythonhosted.org/packages/bd/1f/73c53fcbfb0b5a78f91176df41945ca466e71e9d9d836e5c522abda39ee7/pydantic-2.11.10-py3-none-any.whl", hash = "sha256:802a655709d49bd004c31e865ef37da30b540786a46bfce02333e0e24b5fe29a", size = 444823, upload-time = "2025-10-04T10:40:39.055Z" }, ] [[package]] name = "pydantic-core" -version = "2.41.4" +version = "2.33.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/18/d0944e8eaaa3efd0a91b0f1fc537d3be55ad35091b6a87638211ba691964/pydantic_core-2.41.4.tar.gz", hash = "sha256:70e47929a9d4a1905a67e4b687d5946026390568a8e952b92824118063cee4d5", size = 457557, upload-time = "2025-10-14T10:23:47.909Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/81/d3b3e95929c4369d30b2a66a91db63c8ed0a98381ae55a45da2cd1cc1288/pydantic_core-2.41.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ab06d77e053d660a6faaf04894446df7b0a7e7aba70c2797465a0a1af00fc887", size = 2099043, upload-time = "2025-10-14T10:20:28.561Z" }, - { url = "https://files.pythonhosted.org/packages/58/da/46fdac49e6717e3a94fc9201403e08d9d61aa7a770fab6190b8740749047/pydantic_core-2.41.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c53ff33e603a9c1179a9364b0a24694f183717b2e0da2b5ad43c316c956901b2", size = 1910699, upload-time = "2025-10-14T10:20:30.217Z" }, - { url = "https://files.pythonhosted.org/packages/1e/63/4d948f1b9dd8e991a5a98b77dd66c74641f5f2e5225fee37994b2e07d391/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:304c54176af2c143bd181d82e77c15c41cbacea8872a2225dd37e6544dce9999", size = 1952121, upload-time = "2025-10-14T10:20:32.246Z" }, - { url = "https://files.pythonhosted.org/packages/b2/a7/e5fc60a6f781fc634ecaa9ecc3c20171d238794cef69ae0af79ac11b89d7/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:025ba34a4cf4fb32f917d5d188ab5e702223d3ba603be4d8aca2f82bede432a4", size = 2041590, upload-time = "2025-10-14T10:20:34.332Z" }, - { url = "https://files.pythonhosted.org/packages/70/69/dce747b1d21d59e85af433428978a1893c6f8a7068fa2bb4a927fba7a5ff/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9f5f30c402ed58f90c70e12eff65547d3ab74685ffe8283c719e6bead8ef53f", size = 2219869, upload-time = "2025-10-14T10:20:35.965Z" }, - { url = "https://files.pythonhosted.org/packages/83/6a/c070e30e295403bf29c4df1cb781317b6a9bac7cd07b8d3acc94d501a63c/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd96e5d15385d301733113bcaa324c8bcf111275b7675a9c6e88bfb19fc05e3b", size = 2345169, upload-time = "2025-10-14T10:20:37.627Z" }, - { url = "https://files.pythonhosted.org/packages/f0/83/06d001f8043c336baea7fd202a9ac7ad71f87e1c55d8112c50b745c40324/pydantic_core-2.41.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98f348cbb44fae6e9653c1055db7e29de67ea6a9ca03a5fa2c2e11a47cff0e47", size = 2070165, upload-time = "2025-10-14T10:20:39.246Z" }, - { url = "https://files.pythonhosted.org/packages/14/0a/e567c2883588dd12bcbc110232d892cf385356f7c8a9910311ac997ab715/pydantic_core-2.41.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec22626a2d14620a83ca583c6f5a4080fa3155282718b6055c2ea48d3ef35970", size = 2189067, upload-time = "2025-10-14T10:20:41.015Z" }, - { url = "https://files.pythonhosted.org/packages/f4/1d/3d9fca34273ba03c9b1c5289f7618bc4bd09c3ad2289b5420481aa051a99/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a95d4590b1f1a43bf33ca6d647b990a88f4a3824a8c4572c708f0b45a5290ed", size = 2132997, upload-time = "2025-10-14T10:20:43.106Z" }, - { url = "https://files.pythonhosted.org/packages/52/70/d702ef7a6cd41a8afc61f3554922b3ed8d19dd54c3bd4bdbfe332e610827/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:f9672ab4d398e1b602feadcffcdd3af44d5f5e6ddc15bc7d15d376d47e8e19f8", size = 2307187, upload-time = "2025-10-14T10:20:44.849Z" }, - { url = "https://files.pythonhosted.org/packages/68/4c/c06be6e27545d08b802127914156f38d10ca287a9e8489342793de8aae3c/pydantic_core-2.41.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:84d8854db5f55fead3b579f04bda9a36461dab0730c5d570e1526483e7bb8431", size = 2305204, upload-time = "2025-10-14T10:20:46.781Z" }, - { url = "https://files.pythonhosted.org/packages/b0/e5/35ae4919bcd9f18603419e23c5eaf32750224a89d41a8df1a3704b69f77e/pydantic_core-2.41.4-cp312-cp312-win32.whl", hash = "sha256:9be1c01adb2ecc4e464392c36d17f97e9110fbbc906bcbe1c943b5b87a74aabd", size = 1972536, upload-time = "2025-10-14T10:20:48.39Z" }, - { url = "https://files.pythonhosted.org/packages/1e/c2/49c5bb6d2a49eb2ee3647a93e3dae7080c6409a8a7558b075027644e879c/pydantic_core-2.41.4-cp312-cp312-win_amd64.whl", hash = "sha256:d682cf1d22bab22a5be08539dca3d1593488a99998f9f412137bc323179067ff", size = 2031132, upload-time = "2025-10-14T10:20:50.421Z" }, - { url = "https://files.pythonhosted.org/packages/06/23/936343dbcba6eec93f73e95eb346810fc732f71ba27967b287b66f7b7097/pydantic_core-2.41.4-cp312-cp312-win_arm64.whl", hash = "sha256:833eebfd75a26d17470b58768c1834dfc90141b7afc6eb0429c21fc5a21dcfb8", size = 1969483, upload-time = "2025-10-14T10:20:52.35Z" }, - { url = "https://files.pythonhosted.org/packages/13/d0/c20adabd181a029a970738dfe23710b52a31f1258f591874fcdec7359845/pydantic_core-2.41.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:85e050ad9e5f6fe1004eec65c914332e52f429bc0ae12d6fa2092407a462c746", size = 2105688, upload-time = "2025-10-14T10:20:54.448Z" }, - { url = "https://files.pythonhosted.org/packages/00/b6/0ce5c03cec5ae94cca220dfecddc453c077d71363b98a4bbdb3c0b22c783/pydantic_core-2.41.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7393f1d64792763a48924ba31d1e44c2cfbc05e3b1c2c9abb4ceeadd912cced", size = 1910807, upload-time = "2025-10-14T10:20:56.115Z" }, - { url = "https://files.pythonhosted.org/packages/68/3e/800d3d02c8beb0b5c069c870cbb83799d085debf43499c897bb4b4aaff0d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94dab0940b0d1fb28bcab847adf887c66a27a40291eedf0b473be58761c9799a", size = 1956669, upload-time = "2025-10-14T10:20:57.874Z" }, - { url = "https://files.pythonhosted.org/packages/60/a4/24271cc71a17f64589be49ab8bd0751f6a0a03046c690df60989f2f95c2c/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:de7c42f897e689ee6f9e93c4bec72b99ae3b32a2ade1c7e4798e690ff5246e02", size = 2051629, upload-time = "2025-10-14T10:21:00.006Z" }, - { url = "https://files.pythonhosted.org/packages/68/de/45af3ca2f175d91b96bfb62e1f2d2f1f9f3b14a734afe0bfeff079f78181/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:664b3199193262277b8b3cd1e754fb07f2c6023289c815a1e1e8fb415cb247b1", size = 2224049, upload-time = "2025-10-14T10:21:01.801Z" }, - { url = "https://files.pythonhosted.org/packages/af/8f/ae4e1ff84672bf869d0a77af24fd78387850e9497753c432875066b5d622/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95b253b88f7d308b1c0b417c4624f44553ba4762816f94e6986819b9c273fb2", size = 2342409, upload-time = "2025-10-14T10:21:03.556Z" }, - { url = "https://files.pythonhosted.org/packages/18/62/273dd70b0026a085c7b74b000394e1ef95719ea579c76ea2f0cc8893736d/pydantic_core-2.41.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1351f5bbdbbabc689727cb91649a00cb9ee7203e0a6e54e9f5ba9e22e384b84", size = 2069635, upload-time = "2025-10-14T10:21:05.385Z" }, - { url = "https://files.pythonhosted.org/packages/30/03/cf485fff699b4cdaea469bc481719d3e49f023241b4abb656f8d422189fc/pydantic_core-2.41.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1affa4798520b148d7182da0615d648e752de4ab1a9566b7471bc803d88a062d", size = 2194284, upload-time = "2025-10-14T10:21:07.122Z" }, - { url = "https://files.pythonhosted.org/packages/f9/7e/c8e713db32405dfd97211f2fc0a15d6bf8adb7640f3d18544c1f39526619/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7b74e18052fea4aa8dea2fb7dbc23d15439695da6cbe6cfc1b694af1115df09d", size = 2137566, upload-time = "2025-10-14T10:21:08.981Z" }, - { url = "https://files.pythonhosted.org/packages/04/f7/db71fd4cdccc8b75990f79ccafbbd66757e19f6d5ee724a6252414483fb4/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:285b643d75c0e30abda9dc1077395624f314a37e3c09ca402d4015ef5979f1a2", size = 2316809, upload-time = "2025-10-14T10:21:10.805Z" }, - { url = "https://files.pythonhosted.org/packages/76/63/a54973ddb945f1bca56742b48b144d85c9fc22f819ddeb9f861c249d5464/pydantic_core-2.41.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:f52679ff4218d713b3b33f88c89ccbf3a5c2c12ba665fb80ccc4192b4608dbab", size = 2311119, upload-time = "2025-10-14T10:21:12.583Z" }, - { url = "https://files.pythonhosted.org/packages/f8/03/5d12891e93c19218af74843a27e32b94922195ded2386f7b55382f904d2f/pydantic_core-2.41.4-cp313-cp313-win32.whl", hash = "sha256:ecde6dedd6fff127c273c76821bb754d793be1024bc33314a120f83a3c69460c", size = 1981398, upload-time = "2025-10-14T10:21:14.584Z" }, - { url = "https://files.pythonhosted.org/packages/be/d8/fd0de71f39db91135b7a26996160de71c073d8635edfce8b3c3681be0d6d/pydantic_core-2.41.4-cp313-cp313-win_amd64.whl", hash = "sha256:d081a1f3800f05409ed868ebb2d74ac39dd0c1ff6c035b5162356d76030736d4", size = 2030735, upload-time = "2025-10-14T10:21:16.432Z" }, - { url = "https://files.pythonhosted.org/packages/72/86/c99921c1cf6650023c08bfab6fe2d7057a5142628ef7ccfa9921f2dda1d5/pydantic_core-2.41.4-cp313-cp313-win_arm64.whl", hash = "sha256:f8e49c9c364a7edcbe2a310f12733aad95b022495ef2a8d653f645e5d20c1564", size = 1973209, upload-time = "2025-10-14T10:21:18.213Z" }, - { url = "https://files.pythonhosted.org/packages/36/0d/b5706cacb70a8414396efdda3d72ae0542e050b591119e458e2490baf035/pydantic_core-2.41.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ed97fd56a561f5eb5706cebe94f1ad7c13b84d98312a05546f2ad036bafe87f4", size = 1877324, upload-time = "2025-10-14T10:21:20.363Z" }, - { url = "https://files.pythonhosted.org/packages/de/2d/cba1fa02cfdea72dfb3a9babb067c83b9dff0bbcb198368e000a6b756ea7/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a870c307bf1ee91fc58a9a61338ff780d01bfae45922624816878dce784095d2", size = 1884515, upload-time = "2025-10-14T10:21:22.339Z" }, - { url = "https://files.pythonhosted.org/packages/07/ea/3df927c4384ed9b503c9cc2d076cf983b4f2adb0c754578dfb1245c51e46/pydantic_core-2.41.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d25e97bc1f5f8f7985bdc2335ef9e73843bb561eb1fa6831fdfc295c1c2061cf", size = 2042819, upload-time = "2025-10-14T10:21:26.683Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ee/df8e871f07074250270a3b1b82aad4cd0026b588acd5d7d3eb2fcb1471a3/pydantic_core-2.41.4-cp313-cp313t-win_amd64.whl", hash = "sha256:d405d14bea042f166512add3091c1af40437c2e7f86988f3915fabd27b1e9cd2", size = 1995866, upload-time = "2025-10-14T10:21:28.951Z" }, - { url = "https://files.pythonhosted.org/packages/fc/de/b20f4ab954d6d399499c33ec4fafc46d9551e11dc1858fb7f5dca0748ceb/pydantic_core-2.41.4-cp313-cp313t-win_arm64.whl", hash = "sha256:19f3684868309db5263a11bace3c45d93f6f24afa2ffe75a647583df22a2ff89", size = 1970034, upload-time = "2025-10-14T10:21:30.869Z" }, - { url = "https://files.pythonhosted.org/packages/c4/48/ae937e5a831b7c0dc646b2ef788c27cd003894882415300ed21927c21efa/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:4f5d640aeebb438517150fdeec097739614421900e4a08db4a3ef38898798537", size = 2112087, upload-time = "2025-10-14T10:22:56.818Z" }, - { url = "https://files.pythonhosted.org/packages/5e/db/6db8073e3d32dae017da7e0d16a9ecb897d0a4d92e00634916e486097961/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:4a9ab037b71927babc6d9e7fc01aea9e66dc2a4a34dff06ef0724a4049629f94", size = 1920387, upload-time = "2025-10-14T10:22:59.342Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c1/dd3542d072fcc336030d66834872f0328727e3b8de289c662faa04aa270e/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4dab9484ec605c3016df9ad4fd4f9a390bc5d816a3b10c6550f8424bb80b18c", size = 1951495, upload-time = "2025-10-14T10:23:02.089Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c6/db8d13a1f8ab3f1eb08c88bd00fd62d44311e3456d1e85c0e59e0a0376e7/pydantic_core-2.41.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8a5028425820731d8c6c098ab642d7b8b999758e24acae03ed38a66eca8335", size = 2139008, upload-time = "2025-10-14T10:23:04.539Z" }, + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, ] [[package]] @@ -3113,19 +3364,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/d5/de8f089119205a09da657ed4784c584ede8381a0ce6821212a6d4ca47054/requests_file-3.0.1-py2.py3-none-any.whl", hash = "sha256:d0f5eb94353986d998f80ac63c7f146a307728be051d4d1cd390dbdb59c10fa2", size = 4514, upload-time = "2025-10-20T18:56:41.184Z" }, ] -[[package]] -name = "requests-oauthlib" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "oauthlib" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, -] - [[package]] name = "requests-toolbelt" version = "1.0.0" @@ -3761,6 +3999,68 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, ] +[[package]] +name = "yarl" +version = "1.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/63/0c6ebca57330cd313f6102b16dd57ffaf3ec4c83403dcb45dbd15c6f3ea1/yarl-1.22.0.tar.gz", hash = "sha256:bebf8557577d4401ba8bd9ff33906f1376c877aa78d1fe216ad01b4d6745af71", size = 187169, upload-time = "2025-10-06T14:12:55.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/ff/46736024fee3429b80a165a732e38e5d5a238721e634ab41b040d49f8738/yarl-1.22.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e340382d1afa5d32b892b3ff062436d592ec3d692aeea3bef3a5cfe11bbf8c6f", size = 142000, upload-time = "2025-10-06T14:09:44.631Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9a/b312ed670df903145598914770eb12de1bac44599549b3360acc96878df8/yarl-1.22.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f1e09112a2c31ffe8d80be1b0988fa6a18c5d5cad92a9ffbb1c04c91bfe52ad2", size = 94338, upload-time = "2025-10-06T14:09:46.372Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f5/0601483296f09c3c65e303d60c070a5c19fcdbc72daa061e96170785bc7d/yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:939fe60db294c786f6b7c2d2e121576628468f65453d86b0fe36cb52f987bd74", size = 94909, upload-time = "2025-10-06T14:09:48.648Z" }, + { url = "https://files.pythonhosted.org/packages/60/41/9a1fe0b73dbcefce72e46cf149b0e0a67612d60bfc90fb59c2b2efdfbd86/yarl-1.22.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e1651bf8e0398574646744c1885a41198eba53dc8a9312b954073f845c90a8df", size = 372940, upload-time = "2025-10-06T14:09:50.089Z" }, + { url = "https://files.pythonhosted.org/packages/17/7a/795cb6dfee561961c30b800f0ed616b923a2ec6258b5def2a00bf8231334/yarl-1.22.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b8a0588521a26bf92a57a1705b77b8b59044cdceccac7151bd8d229e66b8dedb", size = 345825, upload-time = "2025-10-06T14:09:52.142Z" }, + { url = "https://files.pythonhosted.org/packages/d7/93/a58f4d596d2be2ae7bab1a5846c4d270b894958845753b2c606d666744d3/yarl-1.22.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:42188e6a615c1a75bcaa6e150c3fe8f3e8680471a6b10150c5f7e83f47cc34d2", size = 386705, upload-time = "2025-10-06T14:09:54.128Z" }, + { url = "https://files.pythonhosted.org/packages/61/92/682279d0e099d0e14d7fd2e176bd04f48de1484f56546a3e1313cd6c8e7c/yarl-1.22.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f6d2cb59377d99718913ad9a151030d6f83ef420a2b8f521d94609ecc106ee82", size = 396518, upload-time = "2025-10-06T14:09:55.762Z" }, + { url = "https://files.pythonhosted.org/packages/db/0f/0d52c98b8a885aeda831224b78f3be7ec2e1aa4a62091f9f9188c3c65b56/yarl-1.22.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50678a3b71c751d58d7908edc96d332af328839eea883bb554a43f539101277a", size = 377267, upload-time = "2025-10-06T14:09:57.958Z" }, + { url = "https://files.pythonhosted.org/packages/22/42/d2685e35908cbeaa6532c1fc73e89e7f2efb5d8a7df3959ea8e37177c5a3/yarl-1.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e8fbaa7cec507aa24ea27a01456e8dd4b6fab829059b69844bd348f2d467124", size = 365797, upload-time = "2025-10-06T14:09:59.527Z" }, + { url = "https://files.pythonhosted.org/packages/a2/83/cf8c7bcc6355631762f7d8bdab920ad09b82efa6b722999dfb05afa6cfac/yarl-1.22.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:433885ab5431bc3d3d4f2f9bd15bfa1614c522b0f1405d62c4f926ccd69d04fa", size = 365535, upload-time = "2025-10-06T14:10:01.139Z" }, + { url = "https://files.pythonhosted.org/packages/25/e1/5302ff9b28f0c59cac913b91fe3f16c59a033887e57ce9ca5d41a3a94737/yarl-1.22.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b790b39c7e9a4192dc2e201a282109ed2985a1ddbd5ac08dc56d0e121400a8f7", size = 382324, upload-time = "2025-10-06T14:10:02.756Z" }, + { url = "https://files.pythonhosted.org/packages/bf/cd/4617eb60f032f19ae3a688dc990d8f0d89ee0ea378b61cac81ede3e52fae/yarl-1.22.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31f0b53913220599446872d757257be5898019c85e7971599065bc55065dc99d", size = 383803, upload-time = "2025-10-06T14:10:04.552Z" }, + { url = "https://files.pythonhosted.org/packages/59/65/afc6e62bb506a319ea67b694551dab4a7e6fb7bf604e9bd9f3e11d575fec/yarl-1.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a49370e8f711daec68d09b821a34e1167792ee2d24d405cbc2387be4f158b520", size = 374220, upload-time = "2025-10-06T14:10:06.489Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3d/68bf18d50dc674b942daec86a9ba922d3113d8399b0e52b9897530442da2/yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8", size = 81589, upload-time = "2025-10-06T14:10:09.254Z" }, + { url = "https://files.pythonhosted.org/packages/c8/9a/6ad1a9b37c2f72874f93e691b2e7ecb6137fb2b899983125db4204e47575/yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c", size = 87213, upload-time = "2025-10-06T14:10:11.369Z" }, + { url = "https://files.pythonhosted.org/packages/44/c5/c21b562d1680a77634d748e30c653c3ca918beb35555cff24986fff54598/yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74", size = 81330, upload-time = "2025-10-06T14:10:13.112Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f3/d67de7260456ee105dc1d162d43a019ecad6b91e2f51809d6cddaa56690e/yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53", size = 139980, upload-time = "2025-10-06T14:10:14.601Z" }, + { url = "https://files.pythonhosted.org/packages/01/88/04d98af0b47e0ef42597b9b28863b9060bb515524da0a65d5f4db160b2d5/yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a", size = 93424, upload-time = "2025-10-06T14:10:16.115Z" }, + { url = "https://files.pythonhosted.org/packages/18/91/3274b215fd8442a03975ce6bee5fe6aa57a8326b29b9d3d56234a1dca244/yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c", size = 93821, upload-time = "2025-10-06T14:10:17.993Z" }, + { url = "https://files.pythonhosted.org/packages/61/3a/caf4e25036db0f2da4ca22a353dfeb3c9d3c95d2761ebe9b14df8fc16eb0/yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601", size = 373243, upload-time = "2025-10-06T14:10:19.44Z" }, + { url = "https://files.pythonhosted.org/packages/6e/9e/51a77ac7516e8e7803b06e01f74e78649c24ee1021eca3d6a739cb6ea49c/yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a", size = 342361, upload-time = "2025-10-06T14:10:21.124Z" }, + { url = "https://files.pythonhosted.org/packages/d4/f8/33b92454789dde8407f156c00303e9a891f1f51a0330b0fad7c909f87692/yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df", size = 387036, upload-time = "2025-10-06T14:10:22.902Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9a/c5db84ea024f76838220280f732970aa4ee154015d7f5c1bfb60a267af6f/yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2", size = 397671, upload-time = "2025-10-06T14:10:24.523Z" }, + { url = "https://files.pythonhosted.org/packages/11/c9/cd8538dc2e7727095e0c1d867bad1e40c98f37763e6d995c1939f5fdc7b1/yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b", size = 377059, upload-time = "2025-10-06T14:10:26.406Z" }, + { url = "https://files.pythonhosted.org/packages/a1/b9/ab437b261702ced75122ed78a876a6dec0a1b0f5e17a4ac7a9a2482d8abe/yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273", size = 365356, upload-time = "2025-10-06T14:10:28.461Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9d/8e1ae6d1d008a9567877b08f0ce4077a29974c04c062dabdb923ed98e6fe/yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a", size = 361331, upload-time = "2025-10-06T14:10:30.541Z" }, + { url = "https://files.pythonhosted.org/packages/ca/5a/09b7be3905962f145b73beb468cdd53db8aa171cf18c80400a54c5b82846/yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d", size = 382590, upload-time = "2025-10-06T14:10:33.352Z" }, + { url = "https://files.pythonhosted.org/packages/aa/7f/59ec509abf90eda5048b0bc3e2d7b5099dffdb3e6b127019895ab9d5ef44/yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02", size = 385316, upload-time = "2025-10-06T14:10:35.034Z" }, + { url = "https://files.pythonhosted.org/packages/e5/84/891158426bc8036bfdfd862fabd0e0fa25df4176ec793e447f4b85cf1be4/yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67", size = 374431, upload-time = "2025-10-06T14:10:37.76Z" }, + { url = "https://files.pythonhosted.org/packages/bb/49/03da1580665baa8bef5e8ed34c6df2c2aca0a2f28bf397ed238cc1bbc6f2/yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95", size = 81555, upload-time = "2025-10-06T14:10:39.649Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ee/450914ae11b419eadd067c6183ae08381cfdfcb9798b90b2b713bbebddda/yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d", size = 86965, upload-time = "2025-10-06T14:10:41.313Z" }, + { url = "https://files.pythonhosted.org/packages/98/4d/264a01eae03b6cf629ad69bae94e3b0e5344741e929073678e84bf7a3e3b/yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b", size = 81205, upload-time = "2025-10-06T14:10:43.167Z" }, + { url = "https://files.pythonhosted.org/packages/88/fc/6908f062a2f77b5f9f6d69cecb1747260831ff206adcbc5b510aff88df91/yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10", size = 146209, upload-time = "2025-10-06T14:10:44.643Z" }, + { url = "https://files.pythonhosted.org/packages/65/47/76594ae8eab26210b4867be6f49129861ad33da1f1ebdf7051e98492bf62/yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3", size = 95966, upload-time = "2025-10-06T14:10:46.554Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ce/05e9828a49271ba6b5b038b15b3934e996980dd78abdfeb52a04cfb9467e/yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9", size = 97312, upload-time = "2025-10-06T14:10:48.007Z" }, + { url = "https://files.pythonhosted.org/packages/d1/c5/7dffad5e4f2265b29c9d7ec869c369e4223166e4f9206fc2243ee9eea727/yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f", size = 361967, upload-time = "2025-10-06T14:10:49.997Z" }, + { url = "https://files.pythonhosted.org/packages/50/b2/375b933c93a54bff7fc041e1a6ad2c0f6f733ffb0c6e642ce56ee3b39970/yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0", size = 323949, upload-time = "2025-10-06T14:10:52.004Z" }, + { url = "https://files.pythonhosted.org/packages/66/50/bfc2a29a1d78644c5a7220ce2f304f38248dc94124a326794e677634b6cf/yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e", size = 361818, upload-time = "2025-10-06T14:10:54.078Z" }, + { url = "https://files.pythonhosted.org/packages/46/96/f3941a46af7d5d0f0498f86d71275696800ddcdd20426298e572b19b91ff/yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708", size = 372626, upload-time = "2025-10-06T14:10:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/c1/42/8b27c83bb875cd89448e42cd627e0fb971fa1675c9ec546393d18826cb50/yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f", size = 341129, upload-time = "2025-10-06T14:10:57.985Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/99ca3122201b382a3cf7cc937b95235b0ac944f7e9f2d5331d50821ed352/yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d", size = 346776, upload-time = "2025-10-06T14:10:59.633Z" }, + { url = "https://files.pythonhosted.org/packages/85/b4/47328bf996acd01a4c16ef9dcd2f59c969f495073616586f78cd5f2efb99/yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8", size = 334879, upload-time = "2025-10-06T14:11:01.454Z" }, + { url = "https://files.pythonhosted.org/packages/c2/ad/b77d7b3f14a4283bffb8e92c6026496f6de49751c2f97d4352242bba3990/yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5", size = 350996, upload-time = "2025-10-06T14:11:03.452Z" }, + { url = "https://files.pythonhosted.org/packages/81/c8/06e1d69295792ba54d556f06686cbd6a7ce39c22307100e3fb4a2c0b0a1d/yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f", size = 356047, upload-time = "2025-10-06T14:11:05.115Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b8/4c0e9e9f597074b208d18cef227d83aac36184bfbc6eab204ea55783dbc5/yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62", size = 342947, upload-time = "2025-10-06T14:11:08.137Z" }, + { url = "https://files.pythonhosted.org/packages/e0/e5/11f140a58bf4c6ad7aca69a892bff0ee638c31bea4206748fc0df4ebcb3a/yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03", size = 86943, upload-time = "2025-10-06T14:11:10.284Z" }, + { url = "https://files.pythonhosted.org/packages/31/74/8b74bae38ed7fe6793d0c15a0c8207bbb819cf287788459e5ed230996cdd/yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249", size = 93715, upload-time = "2025-10-06T14:11:11.739Z" }, + { url = "https://files.pythonhosted.org/packages/69/66/991858aa4b5892d57aef7ee1ba6b4d01ec3b7eb3060795d34090a3ca3278/yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b", size = 83857, upload-time = "2025-10-06T14:11:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, +] + [[package]] name = "zeep" version = "4.3.2" diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo index 8f57ecd25f8c13f9103df30094a0aebdf8570616..c5a01497c40f60fdd2c11b6d1927735300470528 100644 GIT binary patch delta 3650 zcmai$eQZ@{9mjvPOc-yabgXL&+W|(A4(_0v>sU8lW#h%V%3GmB;L@J<-g$d3yZ2UC zk=*gp(gE3K>WtHnZ85H;Yw6epfhFo9XyPAY94?-#iD4RDBsw)FiyBS*e9t*0C7Af6 zzw>#X=RD8zdwtIB(ez6Pa=)1|{$-(ZZINmI04!gB*KD-as!>ep)hpn)FnpvFr z*GkN8gOjEQ3Z_F2uyVMXb+h0i#=A=c1t;K2#&5w&_%|pAr_8`exDZyL-*(ZF0nfrZ z_yVkgKZcxXzlG?wze9OkTxQ0fmGHnRn+Iih1l|LiAvW8Wp(61-R4`wHioiEQUV^3Q zw~y#>w%HwKt3VmlL0ch4TPIY=k3vP@Whlkp3de6iDH?*>mxuEBDm(x`f=w`imvZDX z?0~<3IUT&3#L2TpNSbXY)O;IU0kh%!S*VbIAL^h>@Gf{2R>MC*rJ$_b?2~XMlml_7 zobQMDYOlgaVZNOB%cH+CArC%=+VCH!h?H=;QZYB=a;W#s5M7plGW;-vn)W&7cL_%*1AyaQ$FyYMLd8Jq~4C}D+m4^+sX zhqK{Zu!UQ21+HgY%bk^DUx943uZMga%D^j72Iu}jM+cWuIZI$AoK?jAg%2~1%?WDY zb*Q5I0Q$LxPckl>YxYOhx4;x^z>8Oy|K5V&_B3IwQWAr@O`WiXbvF=)fL`lhzNnz{`-ctYUF+jaNf?yd6qm7Gj%q!zpk8eh!|4 zwYvWkBEiB(pf+xVTG$RBf!UBF@CnA(VFRqapFG0n;2QW#=)fw%sGL6v36eEJeP7aW zI_!n2g;(H4^xF^}E&K;O4J((Loq#`q+PJOO>~)xcs`_aU1VuC->ekdjrDi$Y4A(>L zI|=1T9x4LwLV{|)g9~BFgT#Lion>?s@^3<%u=k)sRP?Ff-fn?A89xi9=zTa1UV|#8 zzd*8R6CN_-&uV!rhjA!H1CVIjdvH3GG8JcO9q})ta~~5#)mFe2FbP#er=cufMe9=AIUyUM4(Nh+z#l<*`YZTrIG)Wi@ETM^{{>YeHH1Z}PQr2UGs^!S1V=53 zka9n?8OT|Fo5iyz?8`efMXAZ}1-TBpK6da_U67TVT6;KJ4bx#?`u$(0&%;zWIf^Pe z$}7?Gy;BbFLPp!YbaW${k&I6%|=~jC@m3E@ZRI;lh)tR~Ra$Pi;KQi&F<8lpwF6;@+SsIBfT~hn7 z(-MoOqnww{MC{3ZZqk3;s-!WU`eMA*^{sc%*sh&0U$S+hKZ>KR|93?Lv=JI951Z=%wTJ7mgIVy^BmR+wJAOLGQFTQs^!m_xhQ*v82%JT__yX zvWR(SSjR^1l)v8_VPeEP>zxYUcyAPrjGjE~_4Dpc-W9rY9P(Y{;;k>e(;VIFoxkP4 z?|AQ^sK0P1+{2=N4mmdVkP$TKd@U^;GH<~5ss|$nFp)W2)V}hYHx3n!5(B)*@2=WW zl=E&xhZqcwiO(2!{eVzLK^=L+-kHKdlpT+to!%f?hD{xB`2X6g)rzQhhB$lqX>9T% zuMG7%ea(@o^1$vOWUL7dj^xkH{`j`Ve&$f9w2(>*oxT9OgTa_|=1!qy;0_!A_n-y00gAJyrdiu5(s)$~;?DeYTVJ#%}HH>`r`@dnuRrb7Wy vOBba&Og-M5B_GEa>Tp$vRvlsHu){7{e^3+N390H~{RQvLocvSOLo@yheeEVs delta 2246 zcmXxlTWnNC9LMqhZYh^i%I?yexONvx5h#Kcw3N2C#iEo;q1+a+U~5q%Q4teD3~AR} zZ824=fEVHeg@jm)L~;Z)@rp)c2=PH5jGD%3FxGmjn)o0@zrS;4C;LC2nX`M&%=~B0 z+5XO+htfl_afgkvgNPF~S!M^Ybvy^kBNNT;4VgWP^JxD($?OZ-1vy-UBa_W`alUzq z*)rO1VJYo@^US7WVrp>TrMQ@O3a`RGEHF#k2`ZJGcn7b>zcGRl4peOh(uY;xG^|DX zwiYbMR!m?o(x<(O8v8k%fbXFO{)ux8qqO53V)Snds5Ee*0d=Ftk&hkcz+~(UX5&Yw zjz4qlFHs$Rjk<0aHRDjstP|sy!Xv1O{E7Etm|5t)58`C{w=ODV)t+)+9Kt%<$K3hv zaUAVmP&XRGVhrV*&Bp0C9~*EEK7fqHUPLX$AaaRa#2Oq%O{hfq*9>M+(FNtmAgva) z6ziP#x$k?ikn=}SOL7`DlXo!}FCh1}uTUxf6|1nAi?lTBQ3Gj5?SZ|8!MG zr=^tqgc|8@*n?M)jc?rySE+plmGX0V4Gv)kyZ$o9!)9&FW(nsz`ErEzS=^0BlV&e- zKEir*&_0Q4Xy>K5TP2lN)EXYbYWxtBcm?%XmRxJL5vx%H=|{3_Z=*8!IkK^B6ldaP z)RH9laSP7J8?X!YyVI!a(&wq@heNm&N1e0hn%zdb9W~NH+>HO=E!a%nllVL;)gI2k zPf-IKL3Q*WY6&7dtE;dS^}F48O3(juRQfnk&-8WSMI68%knLdI*9B|$3XZ3J3Ulxb zZom&v*X1t=CNd9|flB1owiOw(J&A4j1}fvxg=P!&{5MfiiXKLm#V%kg{*LNs_4UD? zNTD{_J;u`>KHNxJBxLC{x4C{<|t!-axrFwH-j*s=0sc{cLYbnMno5#rQH8RJ(6X#2 z(i=E55GvX%+x=Rw{@NtGz^tCoy5B`;!(|b(h#X=Y!9MhNbPV\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "الرصيد" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "الطلب" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "الطلبات" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "معلومات شخصية" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "الأذونات" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "تواريخ مهمة" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "معلومات إضافية" @@ -70,7 +70,7 @@ msgstr "التحقق من الرمز المميز" msgid "Verify a token (refresh or access)." msgstr "التحقق من الرمز المميز (التحديث أو الوصول)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "الرمز المميز صالح" @@ -104,9 +104,9 @@ msgstr "التعامل مع تحميل الصورة الرمزية للمستخ msgid "confirm a user's password reset" msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "كلمات المرور غير متطابقة" @@ -130,39 +130,39 @@ msgstr "معرّف المستخدم الذي تم ترميزه بـ b64 الذي msgid "password too weak" msgstr "كلمة المرور ضعيفة جداً" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} غير موجود: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "بريد إلكتروني مشوه" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "رقم هاتف مشوه: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "تم تفعيل الحساب بالفعل..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "الرمز غير صالح!" @@ -198,6 +198,74 @@ msgstr "اللغة هي واحدة من {LANGUAGES} مع {LANGUAGE_CODE} الا msgid "address set" msgstr "العناوين" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "إغلاق المواضيع المحددة" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "فتح المواضيع المحددة" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "مفتوح" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "مغلق" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "المستخدم" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "الموظفون" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "النظام" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "بالنسبة للمواضيع المجهولة" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "موضوع المحادثة" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "خيوط الدردشة" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "توفير مستخدم أو بريد إلكتروني لموضوع مجهول." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "يجب أن يكون المعين مستخدمًا من الموظفين." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "رسالة الدردشة" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "رسائل المحادثة" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "مطلوب بريد إلكتروني صالح للمحادثات المجهولة." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "يجب أن تتكون الرسالة من 1...1028 حرفاً." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "نحن نبحث عن عامل التشغيل للرد عليك بالفعل، انتظر!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -431,7 +499,7 @@ msgstr "مع أطيب تحياتي،
فريق %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | تفعيل الحساب" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | إعادة تعيين كلمة المرور" @@ -444,7 +512,7 @@ msgstr "" "تنسيق رقم الهاتف غير صالح. يجب إدخال الرقم بالصيغة: \"+999999999\". يُسمح " "بإدخال 15 رقماً كحد أقصى." -#: vibes_auth/views.py:29 +#: 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 " @@ -458,7 +526,7 @@ msgstr "" "الاعتماد المقدمة. وهو مبني على طريقة عرض الرمز المميز الأساسي ويضمن تحديد " "المعدل المناسب للحماية من هجمات القوة الغاشمة." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -471,7 +539,7 @@ msgstr "" " طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل " "المرتبطة بها للتحقق من صحة مدخلات تحديث الرمز المميز وإنتاج مخرجات مناسبة." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -479,11 +547,11 @@ msgstr "" "يمثل طريقة عرض للتحقق من رموز JSON Web Tokens (JWT) باستخدام تسلسل محدد " "ومنطق التحقق من الصحة." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "الرمز المميز غير صالح" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -491,10 +559,10 @@ msgstr "" "تنفيذ مجموعة عرض المستخدم.\n" "يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة التطبيقات القوية." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "لقد قمت بتفعيل الحساب بالفعل..." diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo index ab2f99bbb25761645cd2c6c4978db86e524bf8e9..7ee73750eb45e88d02b2fda4ca504b84138dad1e 100644 GIT binary patch delta 3428 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 B%KiWV diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po index 576ef676..02684027 100644 --- a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po +++ b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Bilance" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Objednávka" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Objednávky" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Osobní informace" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Oprávnění" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Důležitá data" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Další informace" @@ -70,7 +70,7 @@ msgstr "Ověření tokenu" msgid "Verify a token (refresh or access)." msgstr "Ověření tokenu (obnovení nebo přístup)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Token je platný" @@ -102,9 +102,9 @@ msgstr "Zpracování nahrávání avataru pro uživatele" msgid "confirm a user's password reset" msgstr "Potvrzení obnovení hesla uživatele" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Hesla se neshodují" @@ -128,39 +128,39 @@ msgstr "Uuid uživatele s kódem b64, který nám nového uživatele doporučil. msgid "password too weak" msgstr "Heslo je příliš slabé" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} neexistuje: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Špatně formulovaný e-mail" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Chybně zadané telefonní číslo: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Účet byl již aktivován..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token je neplatný!" @@ -197,6 +197,74 @@ msgstr "Jazyk je jeden z {LANGUAGES} s výchozím {LANGUAGE_CODE}" msgid "address set" msgstr "Adresy" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Zavřít vybraná vlákna" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Otevřít vybraná vlákna" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Otevřít" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Uzavřeno" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Uživatel" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Zaměstnanci" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Systém" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Pro anonymní vlákna" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Vlákno chatu" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Vlákna chatu" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Zadejte uživatele nebo e-mail pro anonymní vlákno." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Příjemce musí být zaměstnanecký uživatel." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Zpráva na chatu" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Zprávy v chatu" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Pro anonymní chaty je vyžadován platný e-mail." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Zpráva musí mít 1..1028 znaků." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Už hledáme operátora, který vám odpoví, vydržte!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -431,7 +499,7 @@ msgstr "S pozdravem,
tým %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktivovat účet" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Obnovit heslo" @@ -444,7 +512,7 @@ msgstr "" "Nesprávný formát telefonního čísla. Číslo musí být zadáno ve formátu: " "\"+999999999\". Povoleno je až 15 číslic." -#: vibes_auth/views.py:29 +#: 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 " @@ -459,7 +527,7 @@ msgstr "" "zobrazením tokenu a zajišťuje správné omezení rychlosti pro ochranu před " "útoky hrubou silou." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -473,7 +541,7 @@ msgstr "" "limitů rychlosti. Zobrazení se spoléhá na přidružený serializér, který " "ověřuje vstupy pro obnovení tokenu a vytváří příslušné výstupy." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -481,11 +549,11 @@ msgstr "" "Představuje zobrazení pro ověřování webových tokenů JSON (JWT) pomocí " "specifické serializační a validační logiky." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Token je neplatný" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -493,10 +561,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Heslo bylo úspěšně resetováno!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Účet jste již aktivovali..." diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo b/vibes_auth/locale/da_DK/LC_MESSAGES/django.mo index 14122866c928b74b48759dd33b49a5bdd6c9d12b..9e350889e731b99c2f26b60663d904ce416392ae 100644 GIT binary patch delta 3397 zcmZveeT-aH8HeBP7Q5}X-F}FrmcrSEc5U6AergLvXlH>|Xr;7li>0)^yK{DC*x8xo z-a9L6(+r@cAw>!ij8Pjfq!o<`B!iJ?qK!k0Aw)weiAnuH|1lwmViOY+h(5o2?`RQE z_Px(J=iYP9@BKKFJ$>(AedG6wW zZnz9;z8`)JZiF9!x5LZf9$4zY;A+ONv*;T59-L{`Fvn_rxB`9>Zh_}nP=p1zWxiRN z`Dc5~E`xIxqz5d3Y+y@Zp6{-N1B?$ZOb>VrZe{!;{5X6U%E7sd5D8borJQev=t#f= za1(qSE`vXZ>}h|3oNX7OJnmd<#-H`@z$v>1N_Y-l4G%yx+ZUlC@hDUn zM_z#w@Yk@Rjq@ZbkSiiq%8Syq7({v{~Eryylx zry)+;_n<=lQ+OSG3o13&E=`4OSW5iq+jbs0D1gV|F?axW5=U)x2ue@{rTh^nA+3yW zKppgFh<01VW{T8mD38}btsjC~w=Wx)8gvk4N8t+i6jVfh1f}#GJOO_NyWoCGSfM=v z74k>na`++~`_IBVaXviCcbCJQK7A55R5a&c z9{vTg#@60Plb&v-cOW`8kA5sap=U-vHEp8?y11 zY@CPv3e|0NR0AQ@eLV@c!`Z}F8{G-V;gM|oTE+{oi}|-;H@pZp!+*iqa5L&vgn208 z+adL7cSC%%2sSp-`4*kE@O3C5GX~QSmO(AN87gGMP#&FvbK%#Zs`)vni2MMe-F^Z2 zvx_{mUoYX){l6Yc=po2&kKLCe{`2TO$b^dOaVTZa!M*S`s48`9(rdL5s@iwLWCJ+K z_(6CCz6DomdBLkY=2-Q%H*_hgKq1e}Cu zv+qLX_BU`Ld=owl{|@D8eSLa+9)ddXJCK`f=OLHCb}IizuuWKiu`bDZ1aH99RJ}8j z9s)Do1ovlsMdH%-c?NRkQoJNu$*J<$Zn~x_ z)B{*gHmL$sL_OA-&8fzeRyC!gn)H(E*sx&+yD{DEdoYFRGOXRUWu3d=A*_tujw#$R zrV3ZJ^LvssQk(oUqx!iI+lr}e!4_eAG|1X*y8mMgRGq5u4H%ceZpBt&D$dVfw_wy( zlKUO7gsJVq?#A|MkTqQ~)zGIg(wzK8fTR^N9)zD$U-2KuhOh(zjE7}JfYU@GW4G20eJNu`jsvlWe+Rx7I=zRBP4g ziCR7S&&wS_wfW_)Cp#Lu(zDQ$%2}7oty{Z(vl}f1VZeT2l(Rb~eKmP}_>kRUZK_=G ziF(ILej+GW+}Qs)GiQ7JWauMbjU${M#$D&D%~f+wbuQei2-x1~DE1SkH_ac;yQO1w zP$?I(9m|mm{r&ZFh=U*89iegb)ql=kxplwq4;6_xJD$R zFL3a5t?q(~LODI)O0`PCjZF78ujhikoVkWmiV*64k0f#gBw_ z-lw@59P!b(PZN^$eVC+YFb-R1vKL9$+s^v9s~4t%N-_5CzjNb0w!4U0lBL-b?N`mi z%UtdIDa$5XXU4R4i^uc&Q7N!Ccz!3v3!uKiE^)`Rkcdq;2 DoR|wt delta 2246 zcmX}sYiv|S7{>8;yQNUNEp27XilrAyTclDb7h$ml77NHlpdb{rl}k}HUV^P4%lXJ*dK zJA3Q-gRS1x!p!|fSw|ET^9af%pY#;uoDsETCP?rI7KhmP&#f2~nWQzK zwql9%75DuvEaH9_YD;=hZ*mSJcp2&2enc(#Zy3iI4{2+bq9(Eil>=`SvHlupFE_U1 z$M_7^4NG;@iJDM1YUZD!CYp4HSq2RhMQ+(l)Jm;H4b+Ny{&m!I@45B|$j6SySpP~Y zU(wQ%^rL3_JMP50NaEXermLmhgIe-l9D!G{jjaC`6 z>hKDxzdqN#;o7&cn)`nvi)v*oBd5f(IF-5F=tXsO4`0SSey#RqXFKW*51^8-8>iwY zsMB*DGx0WR;(wx!V;1|Stt;m;3FqT@^f0DPIZ1_&UE-n#@1T|}{BY`x8c^BYh)SX+ z)QYsB_Ie|Z#ctG_eT(dd^`j;l;YS<4Tal!{Ush5h-&H(Y#Z}9%@??sjv!|&m zvsE-$9ihxtDJ8V`ZE8@~5sQdiLMs)l3XUTt5Gw3OaDsw{yHo~;lEz~Mt8CA@FNEGy zMaPhw4E}%`P)j_Sm_sZewAX`(MncQ`6wyK`*_02D6LX1$#0nyt(DLgTF46vH5UgOZ zr&I7zB3+uP%yx}6PHjzuV7G#QOWjt&ri-#ZT?V*H88*54a@2ppQo>W>B?y)I#B)I{ zwSPJd+W(n^@?R(~1)bwm3*a9YO7Ry3BBuc~1R@q)VQ5b{efG+#Q`u zfBoS7A%A`3NZ2pVZw&3*T~OgC3lb6k^AbPg|5P?I(~nlZ725Y@)mVRg_4%Ct0o8-c A7XSbN diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index d2656f2d..89703fc7 100644 --- a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Bestil" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestillinger" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Personlig information" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Tilladelser" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Vigtige datoer" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Yderligere information" @@ -70,7 +70,7 @@ msgstr "Bekræft et token" msgid "Verify a token (refresh or access)." msgstr "Bekræft et token (opdatering eller adgang)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Tokenet er gyldigt" @@ -104,9 +104,9 @@ msgstr "Håndter upload af avatar for en bruger" msgid "confirm a user's password reset" msgstr "Bekræft nulstilling af en brugers adgangskode" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Adgangskoderne stemmer ikke overens" @@ -130,39 +130,39 @@ msgstr "Brugerens b64-kodede uuid, som henviste den nye bruger til os." msgid "password too weak" msgstr "Adgangskoden er for svag" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} findes ikke: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Misdannet e-mail" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misdannet telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Kontoen er allerede aktiveret..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token er ugyldig!" @@ -199,6 +199,74 @@ msgstr "Sprog er en af {LANGUAGES} med standard {LANGUAGE_CODE}." msgid "address set" msgstr "Adresser" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Luk udvalgte tråde" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Åbn udvalgte tråde" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Åben" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Lukket" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Bruger" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personale" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "System" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Til anonyme tråde" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Chat-tråd" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Chat-tråde" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Angiv bruger eller e-mail for anonym tråd." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Modtageren skal være en personalebruger." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Chat-besked" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Chat-beskeder" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Gyldig e-mail er påkrævet for anonyme chats." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Beskeden skal bestå af 1..1028 tegn." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Vi leder allerede efter en operatør, der kan svare dig, så vent!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -433,7 +501,7 @@ msgstr "Med venlig hilsen,
teamet %(project_name)s." msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktiver konto" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Nulstil adgangskode" @@ -446,7 +514,7 @@ msgstr "" "Ugyldigt telefonnummerformat. Nummeret skal indtastes i formatet: " "\"+999999999\". Op til 15 cifre er tilladt." -#: vibes_auth/views.py:29 +#: 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 " @@ -461,7 +529,7 @@ msgstr "" "oven på en basis-tokenvisning og sikrer korrekt hastighedsbegrænsning for at" " beskytte mod brute force-angreb." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -476,7 +544,7 @@ msgstr "" "tilknyttede serializer til at validere tokenopdateringsinput og producere " "passende output." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -484,11 +552,11 @@ msgstr "" "Repræsenterer en visning til verificering af JSON Web Tokens (JWT) ved hjælp" " af specifik serialiserings- og valideringslogik." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Tokenet er ugyldigt" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -496,10 +564,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Adgangskoden er blevet nulstillet med succes!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Du har allerede aktiveret kontoen..." diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo b/vibes_auth/locale/de_DE/LC_MESSAGES/django.mo index 9b78bb8196db33b5fc850987d93f6e64cebc5de1..113c06b64c197e8d45d65886c2055d315f4c1367 100644 GIT binary patch delta 3493 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 C5Y\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Waage" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Bestellung" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestellungen" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Persönliche Informationen" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Erlaubnisse" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Wichtige Termine" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Zusätzliche Informationen" @@ -71,7 +71,7 @@ msgstr "Überprüfen eines Tokens" msgid "Verify a token (refresh or access)." msgstr "Überprüfen eines Tokens (Aktualisierung oder Zugriff)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Das Token ist gültig" @@ -105,9 +105,9 @@ msgstr "Avatar-Upload für einen Benutzer verwalten" msgid "confirm a user's password reset" msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Passwörter stimmen nicht überein" @@ -134,39 +134,39 @@ msgstr "" msgid "password too weak" msgstr "Das Passwort ist zu schwach" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existiert nicht: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Fehlerhafte E-Mail" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missgebildete Telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Das Konto wurde bereits aktiviert..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token ist ungültig!" @@ -204,6 +204,77 @@ msgstr "Sprache ist eine der {LANGUAGES} mit Voreinstellung {LANGUAGE_CODE}" msgid "address set" msgstr "Adressen" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Ausgewählte Threads schließen" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Ausgewählte Themen öffnen" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Öffnen Sie" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Geschlossen" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Benutzer" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personal" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "System" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Für anonyme Themen" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Chat-Thread" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Chat-Themen" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "" +"Geben Sie einen Benutzer oder eine E-Mail für einen anonymen Thread an." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Der Abtretungsempfänger muss ein Mitarbeiter sein." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Chat-Nachricht" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Chat-Nachrichten" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Für anonyme Chats ist eine gültige E-Mail erforderlich." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Die Nachricht muss 1..1028 Zeichen lang sein." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" +"Wir suchen bereits nach dem Operator, um Ihnen zu antworten, bleiben Sie " +"dran!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -442,7 +513,7 @@ msgstr "Mit freundlichen Grüßen,
das %(project_name)s-Team" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Konto freischalten" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Passwort zurücksetzen" @@ -455,7 +526,7 @@ msgstr "" "Ungültiges Telefonnummernformat. Die Nummer muss in dem Format eingegeben " "werden: \"+999999999\". Bis zu 15 Ziffern sind erlaubt." -#: vibes_auth/views.py:29 +#: 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 " @@ -471,7 +542,7 @@ msgstr "" "baut auf einer Basis-Token-Ansicht auf und gewährleistet eine angemessene " "Ratenbegrenzung zum Schutz vor Brute-Force-Angriffen." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -487,7 +558,7 @@ msgstr "" "um die Eingaben für die Token-Aktualisierung zu validieren und entsprechende" " Ausgaben zu erzeugen." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -495,11 +566,11 @@ msgstr "" "Stellt eine Ansicht zur Überprüfung von JSON-Web-Token (JWT) unter " "Verwendung einer spezifischen Serialisierungs- und Validierungslogik dar." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Das Token ist ungültig" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -507,10 +578,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Sie haben das Konto bereits aktiviert..." diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo b/vibes_auth/locale/en_GB/LC_MESSAGES/django.mo index d7e8f52ce032cfec210af8a63bcb6c83ba80a160..e4f23e2aa43aa475578bca8c20c303f2b1d82015 100644 GIT binary patch delta 3346 zcmd7UTWl0{6vy#XinKs!xu{q`IxSExmO{BBC@qzOTm->#DF{s4X?J0_3p?9lMY4E7 zLSjS%1QJ1sMjnhrOwkw~(4+(tVIGQ74X5LYy@iJ~^y%7=-Gm z7MZlQqEfyam4O4OfnN%rkD&&76ZKvPYQ-0D2VTQf7-N-M$Qg{|XP8#Ub19rwwhSq= ztwXgp;T%kb?I%$wKaJ|B6Ys(cSc+FsB^Wf=Yz$VS77#_%d^@sMdj)4>$6)fW6@5>G zR`3hzh2K#bDWG?iq9pWw)c1ABSQbM~{AtvL_afWIjv$M+H&7{mA7|ossM3rq%uHl* zA^GRt=JTO}T-=2_unx1yqdHoTnvjp0`Ln2rbcTM88mJ4IyA7l>WojI1#S>8PSEJrr z89qnS+%PHIj-zltDkG;*GyMQ}<2lU5Rcv9Ub|Wg~d+=^NfpJd3C#d5(n-67TEh;k+ zRHoX(_NP!8Oz-7JsXvA~1;@F{Abs~E-Ha_!2Sc;dBgJr!c*tob@ z_1{QnC%XjgK}SAn=DIl2)+4yf)J?alv-XHCordn0GNJNJ?cT_JbNDj~9+5uviA2$fBzK;_UyhJ*jitiVk~C828;p%O0FLwGIJ z`ETMuyL~1xnP8Jz4WWAVBkm*S5tKamQ@a2ogsvsTYGS1x!b|%@duJLkiC9Y9yc)xs zb@-6(m49uRYN9{!01+n|2pyTegf5+ut-+m{gY`r%QA9jQu)%|?gwHKRapuuBpf+@j z&_;iluqxk=Hn(`56K_rXDW~3ZT*ptjO-)X#?{S8zBW}uxd%o{Bd$&CJnWt1F>A8*F z@A)E@@IA-(VqQbaYjiR{37Z?OCXsa9mPAW?Jkjd^_2mM$rQ@007qd1k$&AH(GSjIj zFRz$5X@=7fag#3nCH-<+y2Wb=KK?$)vSgwy+UNzdcNocwyV01_^bcc}clPbFBkzs*ZJ?TJ>$jVW*KWlkg!Yjo<{i#vuFEY3@JE60CP ejhwJn9XoUPXT^%`UoFOK*#rJ3rN}Ays?VQ23-M3@ delta 2248 zcmX}tTX0QR9LMqh$%%+KB_|qEIYeBdMMEM=NW?*0>VByt8h3+~bTGVhrrm87aep9; z7!PFJrZ3E4(ueX89W$6drA%8hW`YMgjhWN(gyH+!dmU@ee}C56Cws58{%ft1b89>6 zyoWjI%|=;I#E6Qp**>h#;6nL6(`-}7><1h{`=1_W9kg?^cm|*KG;84g{142g(*6a9 z(0Ob9Q&5?zMRl|S_53!}b3eKEapYr{^2q-%D($qClBcMV zKF7WI2HE(wo8c<8hfyhS!vXjZ8`<@*QK#f9W}{8n!BNsFd5bzF9RvBE`x6EQr{oN3 zX`Xn6W}i^W92^X!6w7GWBJZ?ANEYn^j>qe$jJ-rQvPF4|_QYV+Kub|GpM=`13s3`E zj&x;v&_5-prT5yX_{Rj5%3IDPDrK>uK?;j8PCJg;?YmIlx1xVaP%pfR>i7;SqxanX z2dL*Bp-xE}Y3G!9Hh@YEH%_5u@;~aBgvqmBybZP4Jk%*U;O;l0PD!h~{}|J0ccFjW zkkzxa;bwd+pNme(G}KaV#eO>fC#f)5yMjvHJ=A7s2Pt%ZK`V2Qq&@2 zwjHPrTabNh3Dm&vpeAx3bxNL~PDv6+(7$D{0m`uiwKkhk1NjEE2M(h;x`++<8`fbl z>!lYpp$2psHSo)*fp$6HA|H#g5p+r_P?=hao;s?dq8Bxy9{dsY!egklx`3KtJ1Qej z(LW`)nf4pZ#0K)qq-;BqeLID0d}~Jz!TVB6js2_Q*($DjNM&AtpEk`PoXtizcNqnke;a!6}>S>M4e4{Z%FrO3{~UxYFIJCD3e?+Dc+F zF^-r)%ptUQH2djdX_GEg|7pah#A-rk{4*j|bTX=4 zV~ta57$L~2|7)q+<+`|{B})}8m&zbwkt&ogh(cm9;Vt13CsaNsR{FKzM?*g_`jwkP zXn(9FI20BpIL7`tUx8zZVnTaH8%vutRjOQNwsS%13uF&PZ6cLf?&cUwY|Ls7B{oJ{ p!--h-^w7~m(IJUsbWS9(DeGt`RG8QhIU7#oXIBT`%q{vW>m9fX&U63( diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 96fcc53a..5433cdf1 100644 --- a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -17,32 +17,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Order" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Orders" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Personal Info" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Important dates" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Additional Info" @@ -74,7 +74,7 @@ msgstr "Verify a token" msgid "Verify a token (refresh or access)." msgstr "Verify a token (refresh or access)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "The token is valid" @@ -106,9 +106,9 @@ msgstr "Handle avatar upload for a user" msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Passwords do not match" @@ -132,39 +132,39 @@ msgstr "The user's b64-encoded uuid who referred the new user to us." msgid "password too weak" msgstr "The password is too weak" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Malformed email" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Account has been already activated..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" @@ -201,6 +201,74 @@ msgstr "Language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" msgid "address set" msgstr "Adresses" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Close selected threads" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Open selected threads" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Open" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Closed" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "User" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Staff" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "System" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "For anonymous threads" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Chat thread" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Chat threads" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Provide user or email for anonymous thread." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Assignee must be a staff user." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Chat message" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Chat messages" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Valid email is required for anonymous chats." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Message must be 1..1028 characters." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "We're searching for the operator to answer you already, hold by!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -435,7 +503,7 @@ msgstr "Best regards,
the %(project_name)s team" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activate Account" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reset Password" @@ -448,7 +516,7 @@ msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." -#: vibes_auth/views.py:29 +#: 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 " @@ -462,7 +530,7 @@ msgstr "" "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -476,7 +544,7 @@ msgstr "" " within defined rate limits. The view relies on the associated serializer to" " validate token refresh inputs and produce appropriate outputs." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -484,11 +552,11 @@ msgstr "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -496,10 +564,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/en_US/LC_MESSAGES/django.mo b/vibes_auth/locale/en_US/LC_MESSAGES/django.mo index 2d79ab07762fe4af59376344f2d5846733dfa503..2547a992d82f4b3fe551f37997c226d07f1b50cd 100644 GIT binary patch delta 3389 zcmc)Md2Ccw6vy#Xi%<$}*%T`vuVvrLDvL#EK^8&wO%{Pi=e0993(T7lD&m+Z5)zR; zF)GohArUnp852dLVj%jL7%Y;QhyngF5`v5zhBKe{?#z4l-gEA4 zIJfe}4Y}{SwL4_AEYX`dRcv+`;~n^*UFc|b4_?I1>L@iUgEH)dy-@vw@J<|u?Qt&N zfr~L(MBq^F&+t$`{1e-m<;>w}{cr#d!&+?NfhLS#ZMj*D{#Pr^ZpYFtg#o%CFR-3C zjoY+R8Maz&$ zTNah_ou~{PLJj;FaIt!yDuW?O^m zZ^WsX3H#qgrTk;mi%#NQ*n$J`3aSL%dzuZ#I@AJUsG4s>)@rZdWX$&@|60*cbZ7;? zq8?~PWu$_)s}$9tQ&8WpLdLQipI{1cpnmr0(ats9jy{6lymgwW2iYcUw^3??xThS{CB3K4;?yYLy^hbRGfqx zQKfkUHIY09djK`iMT}u9uEeIA!h1eNP3RnI;y<7!I&fsciKubrj3obBah49HYBy@2 z{iq2YK|S~(>V;pRN_7FX!t1DvRE;W3bPztu{dg?F*HD>#3)!c37CBgU9XSN{km|pl z&`x%V(L_1n6PmdiN7`-+t_pS2rRuCbqNdZ(wkZ=T&%JFsxo!&Yr(rt0*7(70e*{xu z=M9u%rRhF`y=Y`Ps3!!CBW$yXRYXP5V>S`BLXRj8`*eJj1+^(eGPnv(Mb4ISvyf0- zR}<{HAf*sA9Wk|~#9Bi2o=d1K8A4^#DNs4o$ZYVRnI*W9s3X*B36*fMZo)Q4=f9B~ z?e46%T?(IVl+8l10d z-ZVBvC+x;Ub@DnN8OB*@Oi#Ua!gxwLFnMyluGL>vjq_Y0sU(R-u`DaS@73Jm?#$rB&>5Q(a89i#u zM5iI@rd{5b_G@gxCNCL${Bw|n>C|Jfh!@P>VI(i%#^O%nzl>R9i@i;0&-aoUpG7ZY zxsI324=LSK+;xdEU`v|)jF&KdlYg&lM$u3=9*cx;jQLL5+nkN1S>VlYXQCPZz#ruU z>sNS#(#nIIZivQ`O~LOnQO`+j^3raGDP>Y*!r#Kc&8e*8#+AzE;Z8Iak2o8etL(s; x>dO4Yiou<8ZOU{js?;H@Vg9L-gGIS2yQM|Scj&YCe=1Ske=SkIwd$MFzX0;60PFw& delta 2248 zcmXxle@vBC9LMqR6$C|0xCxRHKjK0pMcuRzlJt`JqmuAfNCKhuLzebq(>XWk($opg zsWTO2;igU|bN$h-4cIKV+S<^yx#f!3ViUKdv^JbgH?8&lJkPmje4p1j&*Sr)bH3-C zYuARK>!TyV#G^)ehsY-8Czy3$LlPHC+a$A10kh9=HtjzroBc#PBZYVHk11v?+^?Bx zRzK8fpcls;bXWTGt8paL#2!x7jYKe#WYOgLe=t-J}iunVkOeI zt-um&z+7xc`m}SXvG-vzev2CT56*E+r=86uNdHz!CBlse>O;GbKRd&P$=KI85x+-u zJm}ijP#q1U-n)*PaUf{cirH9)U8srN!7Vs}S?IeT;}rV0PpObq+vgq}!3DHWyZfV< zNc%SGL*tl*f$3&NI1``72o~dq$XKiswG_R`EA}JK$LpvG%7k0F27n??Q$seDIE zDH%hJ^l#jY{~{aT_Ap$f_5dp7efT(z;6`@+L)0m0W;WWCgB&HDl7CRAWH5*4+%L`Z zPe~_gX@;ZuW=~Q14>geDC;VelgM8C=Az8F;EW;QoW4DlvY{`5@dm;-p&|=ig!>G+# zjT%rb(uM6rP4FaY>7!p#(J{GzO65i8O;pN)AwPv7jLOvX^hBr{p`s6MK)tvf^}!C*T77|< zVIL|Zzo77`FLSZ?k*wPxWaC>O1~6XMQepq9MD1;^dP!xukC!&hP-#@r zpuz;F$t$^B=MfwIruUy$4Rxhir$v)ed6szItNEv_%GKi(YW-DSB9x+aYPgc@)Dmbm zN^K?aGVubjn0SrQ-qGwA5t{94qJfx8Xg|C{EFoSe-Xtay+E3b~wd#KY@eI*S=#0Ne z#EVWwwQH<*Y7J8fvg-X>>UOy\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Order" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Orders" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Personal Info" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Important dates" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Additional Info" @@ -70,7 +70,7 @@ msgstr "Verify a token" msgid "Verify a token (refresh or access)." msgstr "Verify a token (refresh or access)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "The token is valid" @@ -102,9 +102,9 @@ msgstr "Handle avatar upload for a user" msgid "confirm a user's password reset" msgstr "Confirm a user's password reset" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Passwords do not match" @@ -128,39 +128,39 @@ msgstr "The user's b64-encoded uuid who referred the new user to us." msgid "password too weak" msgstr "The password is too weak" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} does not exist: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Malformed email" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Malformed phone number: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activation link is invalid!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Account has been already activated..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" @@ -197,6 +197,74 @@ msgstr "Language is one of the {LANGUAGES} with default {LANGUAGE_CODE}" msgid "address set" msgstr "Adresses" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Close selected threads" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Open selected threads" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Open" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Closed" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "User" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Staff" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "System" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "For anonymous threads" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Chat thread" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Chat threads" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Provide user or email for anonymous thread." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Assignee must be a staff user." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Chat message" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Chat messages" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Valid email is required for anonymous chats." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Message must be 1..1028 characters." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "We're searching for the operator to answer you already, hold by!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -431,7 +499,7 @@ msgstr "Best regards,
the %(project_name)s team" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activate Account" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reset Password" @@ -444,7 +512,7 @@ msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." -#: vibes_auth/views.py:29 +#: 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 " @@ -458,7 +526,7 @@ msgstr "" "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -472,7 +540,7 @@ msgstr "" " within defined rate limits. The view relies on the associated serializer to" " validate token refresh inputs and produce appropriate outputs." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -480,11 +548,11 @@ msgstr "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "The token is invalid" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -492,10 +560,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Password has been reset successfully!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "You have already activated the account..." diff --git a/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo b/vibes_auth/locale/es_ES/LC_MESSAGES/django.mo index 5b1b40fcbfe94fc7c4383c8b317d56506781826d..1acd0aff14d3765767a1d71b027994c255ae7a72 100644 GIT binary patch delta 3432 zcmZvee~esJ701uITWz;pw(S;6Erq*nY28wWb{8#m5w^P&Dy4Mkwyc)g@^|nQfxvjP)JG)QH=5{KrmCIA<-HaY7~QkYWxEYKMJpcABJ1ug>VNfwqS4#>(_Z{1w0Ge%$jVp^Et+R0U3C zoQ4ZH-`-(@Z?i>an?M(oqg{}otp-){`=KiEDAd7U&DKvs9rPU3dkv_J&%k@&J8%@1 z$x?~D3@h*#ur9}g2&c@3Au`(@sQqzx9js>iC!tFI11Lw+@FI8yu7ZDtlAvp`*~j4k zR01U^%@0CywXeZzU}G`$S4MwjLm9jW^}@fQD$!%!71-=Ot*sSj6fpg)ttb5?r4{^WYGc9H(5n4^RmuwX9TTuT0knu0@Cp`BLc)jlb zsnupz@IV`BeG2wMlC=tS@F?ts&q8(guVLCF5C_&tbhxmcPzihqsy7~j>W!zNDs&Rg zfp5Se_!eBL`|l7=rQQtHggfCZcspDNgNzSDX*&%i*_-eN_%8f3?B_>72Twt1{$R#$ zLizn3l;2a?`W1Ku=iASis0sfCL%4`Lv=1JFYMQsG1c~2wVt{!7syaKvm}QPc*M-Kcpx&29@Z;kV{}UOaD8t4OoDY zNUCK5ufa69(#8!-hxF694jWBp%~EF56rbZ$4aXVhjfrd}$>VIU^V7^f52I}J926;CUzGK@)|+c7Rd zdQCt&Hf7ui_hKbXnl8Yqm>O~p#_vfwXqogsGb8X$Yyi{f$0X4XEwXWw?*BLoX}S?Z z=JYR^?)56H1Jm8!j7dNBz!t2CX>7wji`}M0Huw{e_K+H^7u%lg3x#aH2i~H&>aR{8 z!scVwV-+lqsgvho8oKBE(^<12$C#_}F2z2BsTnnvW0P377L0vZ7gom9`L|-WDM?Bb zq4%y*t0z@A=3U^DYA`w}F9vadzc|U+ z_DLV6AOC;Ia2y>d6?_`K<0M}RN@X|x0cYlHho6jn;=^h}(z{64`LNN`eynxDh$>(s zQ%TiVOy4xV+p)Q2O;9csGLNOi#eRRS6qDfj-U+mt9Do0URRg1bb*wrBalTjzC(`Gt zMem|X9|u)Jszy{I`2q(|MKu?cRm!Qgt{9aIZfvT%aY^Uky!z&{%lo7hg+W}3T)`ue zLal}5Sj+ax4wng!lykPthe>d!=SkJ9dTyP}Y-}l&<;Uft@BnWG`OmBWtzQ=JyZCg?ansa=9#^Kw=@1d$83yoaW2>3M9}PM=G*hk zmN7nyRgAArGb_W2{M3D$u#s^W-irIN*eqcu>C9*11DuKfVgVNLLDwS4Gc1bJu^D-` zb>Lj=!3rEgo@u90Yd?ci@gvm2&pRivka3ugBA##cbYe`zP&axJ`Lh#zuo-(7v+x}1 z!JoPDcc=%AqprJz+Obz;whP19g-1~v`3L(kgI(yp+cC)V?Rh$6)%LkBUdJVj-*EFk zV}S7=s2fdUDS9)^Zo@LX17lc=1ISwJ2&xn#$R+j_F2YNw4V5eZ+CeoPT`(6}q&1^T zvC7%!z8}I8=8vLE@)l|*A7TibmFh7hX?7V^k{hUn1=*F( zR2?qI2IMQ-iQ3>XROu6=bh7BYjd$Z&=L9OHWo(xu*gRZ;t=NnQQ4jtamFnM|S8)pC zd{(LZmY~LA)Q+o=WLXCe=>6}dvyO>zRIQrG^ImL2URC=RwX;dN1E*quUmLxCAyi4i zsEpM+*Wql&uc1odV>W(+ya+aqD%sztl4tSGMtQzP==5SID&-$LzemoAU2)?=^4HI} z4maZwR0*!5N-(3I@?b40#XC^W_wZt*ODosuT*MR z`T^3(UrgLXtRR$bWk^}knbE;pL-Y_jWI9jFi3f;Bh{uQ=LT`jJwo1>>Ae8>~#C$@v zO1CaL_q##dshWlejz#j\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Saldo" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Pida" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Pedidos" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Información personal" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permisos" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Fechas importantes" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Información adicional" @@ -70,7 +70,7 @@ msgstr "Verificar un token" msgid "Verify a token (refresh or access)." msgstr "Verificar un token (actualización o acceso)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "El token es válido" @@ -104,9 +104,9 @@ msgstr "Gestionar la subida de avatares de un usuario" msgid "confirm a user's password reset" msgstr "Confirmar el restablecimiento de la contraseña de un usuario" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Las contraseñas no coinciden" @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "La contraseña es demasiado débil" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} no existe: ¡{uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Correo electrónico malformado" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de teléfono malformado: ¡{phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: ¡{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "La cuenta ya ha sido activada..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "¡La ficha no es válida!" @@ -200,6 +200,74 @@ msgstr "El idioma es uno de los {LANGUAGES} con {LANGUAGE_CODE} por defecto" msgid "address set" msgstr "Direcciones" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Cerrar los hilos seleccionados" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Abrir los hilos seleccionados" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Abrir" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Cerrado" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Usuario" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personal" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Sistema" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Para hilos anónimos" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Hilo de conversación" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Hilos de chat" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Proporcionar usuario o correo electrónico para hilo anónimo." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "El cesionario debe ser un usuario del personal." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Mensaje de chat" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Mensajes de chat" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Se requiere un correo electrónico válido para los chats anónimos." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "El mensaje debe tener 1..1028 caracteres." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Ya estamos buscando al operador que le responda, ¡espera!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -436,7 +504,7 @@ msgstr "Saludos cordiales,
el equipo %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activar cuenta" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Restablecer contraseña" @@ -449,7 +517,7 @@ msgstr "" "Formato de número de teléfono no válido. El número debe introducirse con el " "formato \"+999999999\". Se permiten hasta 15 dígitos." -#: vibes_auth/views.py:29 +#: 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 " @@ -464,7 +532,7 @@ msgstr "" "construye sobre una vista de token base y asegura una limitación de tasa " "adecuada para proteger contra ataques de fuerza bruta." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -479,7 +547,7 @@ msgstr "" "velocidad definidos. La vista depende del serializador asociado para validar" " las entradas de actualización de tokens y producir las salidas apropiadas." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -487,11 +555,11 @@ msgstr "" "Representa una vista para verificar tokens web JSON (JWT) utilizando una " "lógica específica de serialización y validación." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "El token no es válido" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -499,10 +567,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "La contraseña se ha restablecido correctamente." -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Ya ha activado la cuenta..." diff --git a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po index aeeef784..b932dcc8 100644 --- a/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/vibes_auth/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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,32 +16,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "" @@ -105,9 +105,9 @@ msgstr "" msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "" @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -198,6 +198,74 @@ msgstr "" msgid "address set" msgstr "" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "" + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "" + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "" + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "" + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -416,7 +484,7 @@ msgstr "" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -427,7 +495,7 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:29 +#: 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 " @@ -436,7 +504,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -445,17 +513,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:44 +#: vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -464,10 +532,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo index 0fa4abc76b925af23704d19b5b297d3c1602b4cc..54c6cff8c09c5cc277a1df8bf6635506e451f103 100644 GIT binary patch delta 3527 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balance" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Commande" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Commandes" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Informations personnelles" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissions" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Important dates" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Informations complémentaires" @@ -72,7 +72,7 @@ msgstr "Vérifier un jeton" msgid "Verify a token (refresh or access)." msgstr "Vérifier un jeton (rafraîchissement ou accès)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Le jeton est valide" @@ -106,9 +106,9 @@ msgstr "Gérer le téléchargement d'un avatar pour un utilisateur" msgid "confirm a user's password reset" msgstr "Confirmer la réinitialisation du mot de passe d'un utilisateur" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Les mots de passe ne correspondent pas" @@ -134,39 +134,39 @@ msgstr "" msgid "password too weak" msgstr "Le mot de passe est trop faible" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} n'existe pas : {uuid} !" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Courriel malformé" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numéro de téléphone malformé : {phone_number} !" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair} !" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Le compte a déjà été activé..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" @@ -206,6 +206,77 @@ msgstr "" msgid "address set" msgstr "Adresses" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Fermer les fils sélectionnés" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Ouvrir les fils sélectionnés" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Ouvrir" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Fermé" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Utilisateur" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personnel" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Système" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Pour les fils de discussion anonymes" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Fil de discussion" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Fils de discussion" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "" +"Indiquer l'utilisateur ou l'adresse électronique pour le fil de discussion " +"anonyme." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Le destinataire doit être un utilisateur du personnel." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Message de chat" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Messages de chat" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Une adresse électronique valide est requise pour les chats anonymes." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Le message doit comporter de 1 à 1028 caractères." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" +"Nous sommes en train de chercher l'opérateur pour vous répondre, attendez !" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -446,7 +517,7 @@ msgstr "Meilleures salutations,
l'équipe %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activer le compte" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Réinitialiser le mot de passe" @@ -459,7 +530,7 @@ msgstr "" "Format de numéro de téléphone non valide. Le numéro doit être saisi au " "format : \"+999999999\". Un maximum de 15 chiffres est autorisé." -#: vibes_auth/views.py:29 +#: 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 " @@ -475,7 +546,7 @@ msgstr "" "vue de jeton de base et assure une limitation de taux appropriée pour se " "protéger contre les attaques par force brute." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -491,7 +562,7 @@ msgstr "" "valider les entrées de rafraîchissement de jeton et produire les sorties " "appropriées." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -499,11 +570,11 @@ 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." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Le jeton n'est pas valide" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -511,10 +582,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Le mot de passe a été réinitialisé avec succès !" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Vous avez déjà activé le compte..." diff --git a/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo b/vibes_auth/locale/he_IL/LC_MESSAGES/django.mo index 90d63da27f160e92480514c908ead6be41162bbc..45f37b6861eda71abb3c69bd5fd0744cb3f8808c 100644 GIT binary patch delta 3582 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 B(lh`7 diff --git a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/vibes_auth/locale/he_IL/LC_MESSAGES/django.po index 74864de0..c8b7672f 100644 --- a/vibes_auth/locale/he_IL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "מאזניים" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "הזמנה" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "הזמנות" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "מידע אישי" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "הרשאות" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "תאריכים חשובים" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "מידע נוסף" @@ -70,7 +70,7 @@ msgstr "אמת אסימון" msgid "Verify a token (refresh or access)." msgstr "אמת אסימון (רענן או גש)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "האסימון תקף" @@ -102,9 +102,9 @@ msgstr "טיפול בהעלאת אווטאר עבור משתמש" msgid "confirm a user's password reset" msgstr "אשר את איפוס הסיסמה של המשתמש" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "הסיסמאות אינן תואמות" @@ -128,39 +128,39 @@ msgstr "ה-uuid המקודד ב-b64 של המשתמש שהפנה אלינו את msgid "password too weak" msgstr "הסיסמה חלשה מדי" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} אינו קיים: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "דוא\"ל פגום" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "מספר טלפון שגוי: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "פורמט תכונה לא חוקי: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "קישור ההפעלה אינו תקף!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "החשבון כבר הופעל..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "משהו השתבש: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" @@ -195,6 +195,74 @@ msgstr "השפה היא אחת ה-{LANGUAGES} עם ברירת מחדל {LANGUAGE msgid "address set" msgstr "כתובות" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "סגור את השרשורים הנבחרים" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "פתח את השרשורים הנבחרים" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "פתוח" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "סגור" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "משתמש" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "צוות" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "מערכת" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "לשרשורים אנונימיים" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "שרשור צ'אט" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "שרשורי צ'אט" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "ציין שם משתמש או דוא\"ל עבור שרשור אנונימי." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "המקבל חייב להיות משתמש צוות." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "הודעת צ'אט" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "הודעות צ'אט" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "נדרש כתובת דוא\"ל תקפה לצ'אטים אנונימיים." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "ההודעה חייבת להכיל בין 1 ל-1028 תווים." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "אנו מחפשים את המפעיל שיענה לך, אנא המתן!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -423,7 +491,7 @@ msgstr "בברכה,
צוות %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | הפעל חשבון" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | איפוס סיסמה" @@ -436,7 +504,7 @@ msgstr "" "פורמט מספר טלפון לא חוקי. יש להזין את המספר בפורמט: \"+999999999\". מותר " "להזין עד 15 ספרות." -#: vibes_auth/views.py:29 +#: 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 " @@ -449,7 +517,7 @@ msgstr "" "(גישה ורענון) באמצעות אישורים שסופקו. היא בנויה על גבי תצוגת אסימון בסיסית " "ומבטיחה הגבלת קצב נאותה כדי להגן מפני התקפות כוח ברוט." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -462,7 +530,7 @@ msgstr "" "אסימון רענן בתוך מגבלות קצב מוגדרות. התצוגה מסתמכת על הסריאלייזר המשויך כדי " "לאמת קלטות רענון אסימונים ולייצר פלט מתאים." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -470,11 +538,11 @@ msgstr "" "מייצג תצוגה לאימות אסימוני JSON Web Tokens (JWT) באמצעות לוגיקת סידוריות " "ואימות ספציפית." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "האסימון אינו חוקי" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -484,10 +552,10 @@ msgstr "" "אווטאר, הפעלת חשבון ומיזוג פריטים שנצפו לאחרונה. מחלקה זו מרחיבה את mixins " "ו-GenericViewSet לטיפול חזק ב-API." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "הסיסמה אופסה בהצלחה!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "כבר הפעלת את החשבון..." diff --git a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index 22f1151f..1bf1cf5c 100644 --- a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/vibes_auth/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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,32 +16,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "" @@ -105,9 +105,9 @@ msgstr "" msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "" @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -198,6 +198,74 @@ msgstr "" msgid "address set" msgstr "" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "" + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "" + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "" + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "" + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -416,7 +484,7 @@ msgstr "" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -427,7 +495,7 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:29 +#: 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 " @@ -436,7 +504,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -445,17 +513,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:44 +#: vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -464,10 +532,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po index aeeef784..b932dcc8 100644 --- a/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/vibes_auth/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-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,32 +16,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "" @@ -105,9 +105,9 @@ msgstr "" msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "" @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -198,6 +198,74 @@ msgstr "" msgid "address set" msgstr "" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "" + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "" + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "" + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "" + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -416,7 +484,7 @@ msgstr "" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -427,7 +495,7 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:29 +#: 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 " @@ -436,7 +504,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -445,17 +513,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:44 +#: vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -464,10 +532,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo b/vibes_auth/locale/id_ID/LC_MESSAGES/django.mo index f9f902b799932c58236161a5f0240cc4ac9b0e26..b471d663abdc38e90ba81a42591a90553f2ae287 100644 GIT binary patch delta 3413 zcmZvee{5Z48ONX6O}4IG*A|#{jGcDCestcoV+uHgu4CiJtkjJ%H^#=>-qU-}dhfa2 z`N6Dnxh4+D2r>vPkc8bkfy62rRMv7g5z1V7Y3RW)R!ub6{vn%22uw6IW%sM~^ zTm+Xv-CqSSha2HX;dXc#+yToi7+lNx6+T)C{|)Dv)y?B;y?8YofScfXJ}AK=+_cy% z;Qq6nX7gd&lBR!8-tYD_CnpCf;Yn?zyBPRR)Grqt55+ShqR5I zf+TI$Y!#BSYeCZ*OwWxO8h`z=u4-JP$?btVL5hvC)m2`EL*LPh!`_#pf>TmW~`!jkqr zD9Mk(`fC0>7$iMsO)RAkS?<81T`_zBkcc+Jd? zL1pwDl=RO-IeHl`{)pLs;lq5lm_i@q{>iJF?{|=uO4|*UKrf7VuOANS{GT9=H9Ytk z9D#2`b@9ekO=a$ayl7R3y7ml|lxN|m;4dLb+dO2EVtr802caBqf&AGWTrPnzycQmY z13LfTWuoKsTc{8I1SQp9VL!Z(b2(8;>fxOG;PtG(3^%~v2^GM9;C$FcV`%@S zZ~^RxQgQ&U#=i|RQ7v}EqcDbh;lH4oX`Ek|60E{5_!^XhH=rC`$k#f1x3TVls{LLl zM+cyO$ZAl{{1r%b>;$ae%;YSSL3ja5;sFY;jJ81qFbg-s$DkaZhm!I)P#M1t70^E+ z)w4DlgR0mNRCDi!>X`^Cpkq*pJW@da4kpiXLyo@#uY)haG1#)c`QZ+z=K+*bM7Vd%T$wC`H1eNL2@K$&RD!_Mgw$o6=YAc4&UmJ~bL$wK@UW}kJdjKl(lR3W! z7063a68;hDyM@TL1a`x(!zPpH=EM? zf$BLoq=4j=^qu)lod|w9%*R^udmG{Ee0~!Q^Ld-j|2T^=OtRdA(ac$sfo!PpH15Lo zVF9)s>%vrfHPk{(GHX!c>_0O*;Q?$I)7XS{V>`6S#~nKVQ!Mna(+!w@7&rvB4O1tp zIX{DK#pto@{OgF7F^y5|3)tOS4LATQD`yEm#$s z#MF3;FpYNXU^X-J-~^_|TY=qn%3jQ zoA5p7#fh7m^3vGnkZviv#H;#o>`MMci@3Q;%8~Di@1OIaQj2{r_ACBm;upQz-elQDj{TyzV0X^=VRrd{ zCu33V{-Ee*(R+CEt1hT`Qy=29U_1Po$dCOniAj2#bUi<8tZ6&m+O<;(*v{EF@vEjM zjURMuZCUFoK{4Mkh`q=^m%ApN z^vK4;B%N-)pz;OP#{Ok5v=E;BWl?!lrx-+mS9DzF3O7yNrg>7Zk#yQ+mk)6>LXOjH zG?$3y5|`#$ryulOuu=bznlnzxtoK!mR6|MOdw-2~OZo=Cf7Tr2(Bd2^b PK|8squkrK#cNhH+1WpVR delta 2246 zcmYM!Yi!MT9LMqRIX%^C>u5Wrs(Mkat*)iirNyD@GSjk6&Dzc_iXg5_7V5ZWCav?J zN_aq!xWpdd*eVMmqZW}p8i`C|;fYIVc5KfWdw0vg7_GK)f z{n~Gqg}FUr?;Ve&v}>_1He-fa&`wb)*xuV=W#*P2?4>K`*n=d)Hwy{o6Jwtg7vEUmU9%>+qQ8}==H|wvCLfqJc=WrpG^ohNw z88x8esF7bn4K(76V;R&@26D?LqgHAGs-t?;^XpO1?RM>h$j8oRvi^lsex;=)d5Rio zCw`CrA&GB$7_OFfKWfR_u|Gb0#7Be|Fz@ptkZpYM_6ivOjU4 z*(gj!ot8>e60bx3KDdR7_HHNAw}qS+Q8T>f{0GO2R*c6}s1ANa ztz0|$@H%Q>9mrx?C+^nyPh>soxY2^z!{^wD-a)ZFTZQUiE5>8UwcBt8?K7w(jG#Jt zha7S9(VLPn0~xy&qfS*dj=&IR>HJ@(q8U9v4ZzRF1h5Fz;R;N^wWt|?iyBZfGFCf= z^l7(HTiA)@u_ch18c+@@`3g`29gW)BsaQt;)|hwq-UkpXg3>BlK5ZqyD{wmTM7FMvNi4N-dRX zuCdsuBuydMzGxok_BdT!(Ux@;C9p~!F;^AJmqb1>j|hIwB|xamA{wH#*q?>=SpNZ& z2_@JPLYW>%C?ArDdP09NY;iQ{e5fSrDwAAgrn9>13-oJe$5WZ%Zt7fy86J`T0uCH7Dx%-$+_kUzsvLc!UGC7dRl)gDh`(pdXxM=h)l~z diff --git a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/vibes_auth/locale/id_ID/LC_MESSAGES/django.po index d36723c2..3a7b2e58 100644 --- a/vibes_auth/locale/id_ID/LC_MESSAGES/django.po +++ b/vibes_auth/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Keseimbangan" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Pesan" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Pesanan" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Informasi Pribadi" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Izin" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Tanggal-tanggal penting" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Informasi Tambahan" @@ -70,7 +70,7 @@ msgstr "Verifikasi token" msgid "Verify a token (refresh or access)." msgstr "Verifikasi token (penyegaran atau akses)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Token tersebut valid" @@ -104,9 +104,9 @@ msgstr "Menangani unggahan avatar untuk pengguna" msgid "confirm a user's password reset" msgstr "Mengonfirmasi pengaturan ulang kata sandi pengguna" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Kata sandi tidak cocok" @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "Kata sandi terlalu lemah" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} tidak ada: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Email yang salah" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Nomor telepon rusak: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format atribut tidak valid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Tautan aktivasi tidak valid!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Akun sudah diaktifkan..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Ada yang tidak beres: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token tidak valid!" @@ -201,6 +201,74 @@ msgstr "" msgid "address set" msgstr "Alamat" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Menutup utas yang dipilih" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Buka utas yang dipilih" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Buka" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Ditutup" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Pengguna" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Staf" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Sistem" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Untuk utas anonim" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Utas obrolan" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Utas obrolan" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Berikan pengguna atau email untuk utas anonim." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Penerima tugas haruslah seorang staf pengguna." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Pesan obrolan" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Pesan obrolan" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Email yang valid diperlukan untuk obrolan anonim." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Pesan harus terdiri dari 1..1028 karakter." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Kami sedang mencari operator untuk menjawab Anda, tunggu sebentar!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -436,7 +504,7 @@ msgstr "Salam hormat, tim %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktifkan Akun" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Atur Ulang Kata Sandi" @@ -449,7 +517,7 @@ msgstr "" "Format nomor telepon tidak valid. Nomor harus dimasukkan dalam format: " "\"+999999999\". Maksimal 15 digit." -#: vibes_auth/views.py:29 +#: 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 " @@ -464,7 +532,7 @@ msgstr "" "tampilan token dasar dan memastikan pembatasan laju yang tepat untuk " "melindungi dari serangan brute force." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -479,7 +547,7 @@ msgstr "" "bergantung pada serializer terkait untuk memvalidasi input penyegaran token " "dan menghasilkan output yang sesuai." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -487,11 +555,11 @@ msgstr "" "Merupakan tampilan untuk memverifikasi JSON Web Token (JWT) menggunakan " "serialisasi dan logika validasi tertentu." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Token tidak valid" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -499,10 +567,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Kata sandi telah berhasil diatur ulang!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Anda telah mengaktifkan akun..." diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo b/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo index cd66bc16f29a13bc5dbfe0fe4c5d1e0dd4e25d17..b447ca04761d92f86f174c023dbe1a71f407ddd9 100644 GIT binary patch delta 3492 zcmZvceT*Gd8HdlhMcQST?Y3yCg>tsrc5N-U?G`P#1$O&IYgxK)!_M2w3h{-ZIgF+>nFF-AqIff$W7@%hcnHdH;i z?>uwPob!I4`;zzGZH?c|nem8W)R9Y&S6YpE0tV;vV7xWUn1%4Suw4sn#&m!VcmZ4h zwcZOq46lG6gxlbU;0{=ALEv)cKj%;nJOgJK(=e9P+PDOM4EDn*4vfJH?7z?$pY^9Y zjX4jt&CU(XhA1%e;Cl950#`6U(3Kmw9}X~o5q<>z4JyF)IXDTI!TH!X`+1QApMh)P zm*4{UDnzIG9mKYI7b@b`xyJA_ojeH2^guaYf|tQP5TDHvs7%}kmCOgBGVoZzN!W#b z^A0cQHs&H@2Ekk?MLQu*n>tj=k3nVN5h%kai}|xqhF*X=*My3A3f=|ZfxBQplnUe( zScAWS4Jlqv;S||0q|9b7)cPpA7N*7ex1dt~11Lq4@M1Uxm%_K9N-%exF&~8kPyzT* zHNO)QtNAKi2b=TAzasi83yR?HPzU}Em61-gs}ze0UIX=g55$%Upd9}!l*7j%ZDXE* z1Z}K0R3RJ_A=_-@L$!YVroW1O5Zv2FJ0kn*ACcg@1;s<)O>-Zoe1KV*Vh!06q?f z;ImLEe-Fy=8K`qDr92aJAV0H$N28yYTX+#4h4h)3f@|PuNI#h#8sU0402RRl1s{fr z^dwYCz5(&k{0MT?oQ68Ta8=%<{ctAp-B6i2xQhJi-~XiWJ`irS~zo0iJ^DfzwdmXA#{xXxET`Dcr|`BD)(ZqGM2= zpM-MkyHJ_=71VWm7ZRN5;;!l3Ak_cF7I+-)gL2?6kp3iseE%}2QtyUb0&~6Ue=D*U z@el&ZnlXX$P(zMz!?M98$;P!jcNOpajh{1iGm}%;IA@F%v-L18-eo^)mVGcP7N?RjLgxg~1qpb5mHWu@|4%vfrW-IwkP{ve_)?$q$$uOe&+=9^j z*|h=L7%cc{xF7M6ZAcfABIG2avf)faoUOh?v17@y9~v zY^~l%QhU%@&nBriI%?~Qi%Vuh)k|&7C5boY&Y2|nEUm`QtGxf64?&bTo4CN0Q&+M1 zmSVYLHb=4b!YG`mMfK$D$1Psi{M^ikS{g&SE&R#dSzRivUe$M{EmytRLtmVf%=U2? zW{>|hG8{*T{ff)Hw^(vD&kyYA|FKyzJKT8e5*MZkLGL77>%!);w&Sf`Bg%jonMhJs zGy2l}PRFK}A)`68!Hc9T(0`zShg>%Ivb6< z*h_IKjmSiD2Zkr2y7dC3a$<$8MnT0Moak;Y>|Ed8*c#Z1OHx1dQZM!+CWoCRNeM6cu8ue+b4sWRX z^@y)w&EeOR$P5z=yDENCuG3pl=x5dTYp!`JezI;r?T1DPsT~Tix2xNXe@3ZHT6TQ OEF@lc^MRhl9sdFOoG^?4 delta 2246 zcmYM#eQeEF9LMqR?X7xh>$cRcx~g53syf=TYJ7X z(w-XMXrz@yh?wFx+lN&NJV>ASGW*15wgdAh|JmE@Cgrp~w86)H&FZKxO){HK`66ah zewl2Rjzjy!-a8q`Q?9^4xF6HZB6fnzBq}c9V0?xF4DcXpSx6sNi2bn`>D$V26jtF- z+>7*SCsAX+fIaatYT!RRyD)`vh({{@+ZZxoD#EB2?Lt0wj0cmk@39B|i0b&dE4QLL zx{GS}05xM@s@XOSVFfm$Ch|9aigCEE`KVO6cceeoqurF_)YKg4*-ov0Ue zVGw--%!Xq+=3^LhaXm5?JB-?jQ%DoLfm84SYC;)Wf6ZVR88sM%4AP2GTd~l&&V9cZ z2U6dR+LH6AnY3Uc{))WY+E7dW1dA|8BW=wh)Ie%cXW+AetiL)sNJTxK#-&*JM(joV zQ3LuKHS+IJ1MPD9Sq62KhE&-!)Jj#NI;uvs--v3r+m)M;kDUs#{yAi>Qqq!ipho%> z_u#+C!MA#btED}FTJj4x1lw^1r~V&2gEh?NE$Wl`GB3`o1g}tE#{t<%{m3jm!ZzaR_ujMsFnH()$Rw(!0T8*|JFgK5(n`%o#IW-27Ht9QOv|^xDo%rRaiMX z_TtN^7vI7e*nygPKBH2{vr)IF8uh+r)Wljaq8a@}Mk8-SjqEw0q#pwoC<=bf}cHlpI=b z35&6Wm_W=X<`LXfZ=YwPR_}eHiWpA>32n){#C+mIqBo&c>_;qA|8WFcW;MhlVj|I< zD#*-og<7Z1NFu>8@O~{-U8ILgTJr9sE2)%8lq*B}fXE^i5s}3_!i3U$#Bwhe`_~#E zul=7!Xum%uxTWSN_+9aSH>y#$ha=;i0o{F_o$fT%W#&4|y1&3=?d)VSb6h3o#G-5Z yH2R`z5|8<#p}\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Equilibrio" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Ordine" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Ordini" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Informazioni personali" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permessi" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Date importanti" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Ulteriori informazioni" @@ -71,7 +71,7 @@ msgstr "Verifica di un token" msgid "Verify a token (refresh or access)." msgstr "Verifica di un token (aggiornamento o accesso)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Il token è valido" @@ -105,9 +105,9 @@ msgstr "Gestire il caricamento dell'avatar per un utente" msgid "confirm a user's password reset" msgstr "Confermare la reimpostazione della password di un utente" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Le password non corrispondono" @@ -131,39 +131,39 @@ msgstr "L'uuid b64-encoded dell'utente che ci ha segnalato il nuovo utente." msgid "password too weak" msgstr "La password è troppo debole" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} non esiste: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Email malformata" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Numero di telefono malformato: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "L'account è già stato attivato..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Il gettone non è valido!" @@ -202,6 +202,74 @@ msgstr "" msgid "address set" msgstr "Indirizzi" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Chiudere le filettature selezionate" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Aprire le discussioni selezionate" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Aperto" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Chiuso" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Utente" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personale" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Sistema" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Per le discussioni anonime" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Filo della chat" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Filo conduttore della chat" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Fornire l'utente o l'e-mail per il thread anonimo." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Il destinatario deve essere un utente del personale." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Messaggio di chat" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Messaggi di chat" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Per le chat anonime è necessario un indirizzo e-mail valido." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Il messaggio deve essere di 1...1028 caratteri." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Stiamo già cercando l'operatore per rispondervi, restate in attesa!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -439,7 +507,7 @@ msgstr "Cordiali saluti,
il team %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Attiva l'account" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Reimpostare la password" @@ -452,7 +520,7 @@ msgstr "" "Formato del numero di telefono non valido. Il numero deve essere inserito " "nel formato: \"+999999999\". Sono consentite fino a 15 cifre." -#: vibes_auth/views.py:29 +#: 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 " @@ -468,7 +536,7 @@ msgstr "" "un'adeguata limitazione della velocità per proteggere dagli attacchi brute " "force." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -483,7 +551,7 @@ msgstr "" " vista si affida al serializzatore associato per convalidare gli input di " "aggiornamento dei token e produrre output appropriati." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -491,11 +559,11 @@ msgstr "" "Rappresenta una vista per la verifica dei JSON Web Token (JWT), utilizzando " "una specifica logica di serializzazione e validazione." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Il token non è valido" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -503,10 +571,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "La password è stata reimpostata con successo!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Avete già attivato l'account..." diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo index 6ebb33a4a19eb6141e46442cf35042f7aed729a2..617a837784b89bd66b91a2af828decb2c0f5fb2f 100644 GIT binary patch delta 3567 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 diff --git a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index 2c386e38..7a4b2e79 100644 --- a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "バランス" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "オーダー" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "受注状況" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "個人情報" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "アクセス許可" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "重要な日程" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "追加情報" @@ -70,7 +70,7 @@ msgstr "トークンの検証" msgid "Verify a token (refresh or access)." msgstr "トークンを確認する(リフレッシュまたはアクセス)。" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "トークンは有効です" @@ -102,9 +102,9 @@ msgstr "ユーザーのアバターアップロードを処理する" msgid "confirm a user's password reset" msgstr "ユーザーのパスワード・リセットを確認する" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "パスワードが一致しない" @@ -128,39 +128,39 @@ msgstr "新規ユーザーを紹介したユーザーのb64エンコードされ msgid "password too weak" msgstr "パスワードが弱すぎる" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}は存在しません:{uuid}が存在しません!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "不正な電子メール" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "電話番号が不正です:{phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}です!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "アカウントはすでに有効になっています..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "トークンが無効です!" @@ -195,6 +195,74 @@ msgstr "言語は {LANGUAGES} のいずれかで、デフォルトは {LANGUAGE_ msgid "address set" msgstr "住所" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "選択したスレッドを閉じる" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "選択したスレッドを開く" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "オープン" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "クローズド" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "ユーザー" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "スタッフ" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "システム" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "匿名スレッドの場合" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "チャットスレッド" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "チャットスレッド" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "匿名スレッドにユーザー名または電子メールを入力してください。" + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "担当者はスタッフユーザーでなければなりません。" + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "チャットメッセージ" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "チャットメッセージ" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "匿名チャットには有効なEメールが必要です。" + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "メッセージは1〜1028文字でなければならない。" + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "今、オペレーターを探しているところです!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -420,7 +488,7 @@ msgstr "よろしくお願いします、
%(project_name)sチーム" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME}| アカウントの有効化| アカウントの有効化" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | パスワードのリセット" @@ -431,7 +499,7 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "電話番号の形式が無効です。電話番号は次の形式で入力してください:\"+999999999\".15桁まで入力可能です。" -#: vibes_auth/views.py:29 +#: 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 " @@ -443,7 +511,7 @@ msgstr "" " JWT " "トークンのペア(アクセスとリフレッシュ)を取得できる、トークン・ベースの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築され、ブルートフォース攻撃から保護するために適切なレート制限を保証します。" -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -454,17 +522,17 @@ msgstr "" "認証目的のトークンのリフレッシュを処理します。このクラスは、認証システムの一部としてトークンのリフレッシュ操作の機能を提供するために使用されます。このクラスは、クライアントがリフレッシュされたトークンを定義されたレート制限内で要求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行うために、" " 関連するシリアライザに依存します。" -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証するビューを表します。" -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "トークンが無効" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -472,10 +540,10 @@ msgstr "" "ユーザービューセットの実装。\n" "作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPIハンドリングのためにミキシンとGenericViewSetを拡張します。" -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "パスワードのリセットに成功しました!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "あなたはすでにアカウントを有効にしています..." diff --git a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po index 22f1151f..1bf1cf5c 100644 --- a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/vibes_auth/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 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -16,32 +16,32 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "" @@ -73,7 +73,7 @@ msgstr "" msgid "Verify a token (refresh or access)." msgstr "" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "" @@ -105,9 +105,9 @@ msgstr "" msgid "confirm a user's password reset" msgstr "" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "" @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "" -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "" @@ -198,6 +198,74 @@ msgstr "" msgid "address set" msgstr "" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "" + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "" + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "" + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "" + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -416,7 +484,7 @@ msgstr "" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "" @@ -427,7 +495,7 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "" -#: vibes_auth/views.py:29 +#: 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 " @@ -436,7 +504,7 @@ msgid "" "proper rate limiting to protect against brute force attacks." msgstr "" -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used " "to provide functionality for token refresh operations as part of an " @@ -445,17 +513,17 @@ msgid "" "validate token refresh inputs and produce appropriate outputs." msgstr "" -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "" -#: vibes_auth/viewsets.py:44 +#: vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" "Provides a set of actions that manage user-related data such as creation, " @@ -464,10 +532,10 @@ msgid "" "class extends the mixins and GenericViewSet for robust API handling." msgstr "" -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "" diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.mo index 273691950182234f135b8df8358858e1a1a374c4..d337272852ac30983b8d29f252c3184b758e9883 100644 GIT binary patch delta 3470 zcmZ|Re{9tC9mnxcEd#`2DOIsU@KY(8H`QhgYu`VjhT&?uuK=G7&8^7 z;x#xEb-fO6z`JoGK8)AnI*gPMIFI)4c&G+H#|g%yjpb?GI0xtBV!Xfut=NoK;ssPPdr=wa4?K$% zjBh@oLf^(*XUsCFM0KPol23;Qg2iu8*Kn{wAuUvv?z3z*_WBTTnT}nA>nEY5`Hy zp6^1|YF@@An43ZVwW7arK`ZzK^}xSS87ZfCZN)8t_o2SujErSssEO}IP54FR*q98m zX!9B>!TTl~nQ8RxIHIcJ{7f}O! zh|Jwgr!!@09%{vRqMmO=J@-V=j-;tDDYFab;2~5-eub{EV z;)6Hha@q}e&sE0k#6Ol8^HVl@FW0+SjqWe2EuN{$z**>WUmfy%+8nJj=BwQJK0bm~ zEKi51CGa5LP5Ujh_%Ui_H!!PjU>$~V59<0b>MZ;QC*pb37XBe<=W#9VzhkZ5|3)@W zH$IJ5Im#hU))R;F-X47-D?$ z4wYN+b3B99EZ@OPs1>ce!7&qY}+=*J)Fe*bA zQO|31-9Kpo`B&w7F6b?&!TWIueiOfsO67Zje?iWrnOI-^L79U)Xs^O;_$$Z zLKo*_IlhcKJFg>2Ht(Sh_oRD_;UzGSX#bxg?j^zm3-sT6b)v(i!Ygff!~CK_Rg|TT zey#Y&E2#SDtx%d7>x$AEw6xX9psw-#zfRx6L~wBoeslbN)9X2xxP#C(jTL2XC9#>% zYE>2z+9Dlb9YPh7+xw~DWS5Mm`i8)Ovr`Z;72`)FA2NOvf zjwj+BZHabw{L6>J@m%NR110G-#j%)AaXJe^p#^u6Z?8-ThwXl$Y6Uz2kel zqrKL9_Jnt2$Q$hSG9%tgBVONWTj(3g_jKobj)jc(MrUDvm(33y@_Gimh-*}mm`PaJa_}5;h-;VzL*WQug z+}4?;SEa|t&+j{A*+qXFHRr=8{(HiQN7S!3KIV9z)(gJ+g0aSvVDtUG8iQnL%*<&o z(`mi(!LEGv$Nx!7Ep)YGkPxcmm*w0S+GZ}t!G?%sBV7E7L hnmwYHWdix*`z@I2-@MAO^WmwPIuptHvj=9vR!# zVFh+zA@(6-+F8`xhcN}eLQVX-GlrS8^SNX(zEx2P(GfyDXg~7LPH|x|b_plpHPpc0 zyY?;AKzC60jiFZTWtr{6d~CxZ)I$Em-I&BG^xSuG8spoCRM=HJ%DkWc{R&o{7@CW4Cb{n{Ihep?EhRUBeb+7 zzo2IN8y>{}kb`drn69?=C~C`x@kt!T?VS2YcmubxnuYXN@ncPrSr^`+e~<&RpZ>kY zW<9k3#wE1F5fY@_opIj6MYO#+W<^+o99V0^*Kj9R;fU*xp;C~*b*Kq~s({T;8(g`fW9PW~}s1&rLw!9y;<=-G#v)iZ#{*IIJAE(WW zw^L9PpN`Dg>hWv6|6NqxpreFQwbDL3gM+ReVpe)^E9#JSpkBjWxCZxP07p;*Uq}D6 zBWtiRti}{({T$X|Bff+4_5NR=qMZGRIwV29D$Q7edSKYugPPz6s4f2#bp{5p4u?@I ziy@D)9P+CBL#Y4X9A;`kpIopwz|MQPy~{vRl{ z3yH3;^BTqozoqB~Oiz37g# sQ-NrHaD{jLNM>m?mf4sV{kgzPioRbwkQ^;9>+z0{&TEYBF8?n5f0l*JjsO4v diff --git a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po index cdf54526..045c4336 100644 --- a/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "잔액" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "주문" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "주문" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "개인 정보" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "권한" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "중요한 날짜" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "추가 정보" @@ -70,7 +70,7 @@ msgstr "토큰 확인" msgid "Verify a token (refresh or access)." msgstr "토큰을 확인합니다(새로 고침 또는 액세스)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "토큰이 유효합니다." @@ -102,9 +102,9 @@ msgstr "사용자에 대한 아바타 업로드 처리" msgid "confirm a user's password reset" msgstr "사용자의 비밀번호 재설정 확인" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "비밀번호가 일치하지 않습니다." @@ -128,39 +128,39 @@ msgstr "새 사용자를 추천한 사용자의 b64로 인코딩된 UUID입니 msgid "password too weak" msgstr "비밀번호가 너무 약합니다." -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name}가 존재하지 않습니다: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "잘못된 이메일" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "잘못된 전화 번호입니다: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "잘못된 속성 형식입니다: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "활성화 링크가 유효하지 않습니다!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "계정이 이미 활성화되었습니다..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "문제가 발생했습니다: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" @@ -195,6 +195,74 @@ msgstr "언어는 {LANGUAGES} 중 하나이며 기본값은 {LANGUAGE_CODE}입 msgid "address set" msgstr "주소" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "선택한 스레드 닫기" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "선택한 스레드 열기" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "열기" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "닫힘" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "사용자" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "직원" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "시스템" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "익명 스레드의 경우" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "채팅 스레드" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "채팅 스레드" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "익명 스레드의 사용자 또는 이메일을 입력합니다." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "양수인은 직원 사용자이어야 합니다." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "채팅 메시지" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "채팅 메시지" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "익명 채팅을 하려면 유효한 이메일이 필요합니다." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "메시지는 1...1028자여야 합니다." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "이미 응답할 교환원을 찾고 있으니 잠시만 기다려주세요!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -422,7 +490,7 @@ msgstr "감사합니다,
%(project_name)s 팀" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | 계정 활성화" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | 비밀번호 재설정" @@ -435,7 +503,7 @@ msgstr "" "잘못된 전화번호 형식입니다. 번호는 다음과 같은 형식으로 입력해야 합니다: \"+999999999\". 최대 15자리까지 입력할 수 " "있습니다." -#: vibes_auth/views.py:29 +#: 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 " @@ -447,7 +515,7 @@ msgstr "" " 쌍의 JWT 토큰(액세스 및 새로 고침)을 얻을 수 있는 토큰 기반 인증을 처리하는 프로세스를 관리합니다. 기본 토큰 보기 위에 " "구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 적절한 속도 제한을 보장합니다." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -459,17 +527,17 @@ msgstr "" "사용됩니다. 클라이언트가 정의된 속도 제한 내에서 토큰 새로 고침을 요청할 수 있도록 합니다. 이 보기는 연결된 직렬화기에 의존하여 토큰" " 새로 고침 입력의 유효성을 검사하고 적절한 출력을 생성합니다." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 보기를 나타냅니다." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "토큰이 유효하지 않습니다." -#: vibes_auth/viewsets.py:44 +#: 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." @@ -477,10 +545,10 @@ msgstr "" "사용자 보기 세트 구현.\n" "생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 GenericViewSet을 확장합니다." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "비밀번호가 성공적으로 재설정되었습니다!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "이미 계정을 활성화하셨습니다..." diff --git a/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo b/vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo index 8ca1dd4c6db14d40c49d8e31239f0241ef4a9175..a7999a4a46f0bb4892b7af44a51f018ce26bf752 100644 GIT binary patch delta 3460 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Saldo" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Bestel" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestellingen" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Persoonlijke info" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Rechten" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Belangrijke data" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Extra info" @@ -70,7 +70,7 @@ msgstr "Een token verifiëren" msgid "Verify a token (refresh or access)." msgstr "Een token verifiëren (verversen of toegang)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "The token is valid" @@ -104,9 +104,9 @@ msgstr "Avatar uploaden voor een gebruiker afhandelen" msgid "confirm a user's password reset" msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Wachtwoorden komen niet overeen" @@ -132,39 +132,39 @@ msgstr "" msgid "password too weak" msgstr "Het wachtwoord is te zwak" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} bestaat niet: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Misvormde e-mail" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Misvormd telefoonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Account is al geactiveerd..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" @@ -201,6 +201,75 @@ msgstr "Taal is een van de {LANGUAGES} met standaard {LANGUAGE_CODE}" msgid "address set" msgstr "Adressen" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Geselecteerde threads sluiten" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Geselecteerde draden openen" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Open" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Gesloten" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Gebruiker" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personeel" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Systeem" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Voor anonieme threads" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Draadje chatten" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Gespreksonderwerpen" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Geef gebruiker of e-mail op voor anonieme thread." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "De toegewezen gebruiker moet een personeelsgebruiker zijn." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Chatbericht" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Chatberichten" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Voor anonieme chats is een geldig e-mailadres vereist." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Bericht moet 1..1028 tekens bevatten." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" +"We zijn al op zoek naar de operator om je antwoord te geven, wacht even!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -436,7 +505,7 @@ msgstr "Vriendelijke groeten,
het %(project_name)s team" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Account activeren" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Wachtwoord opnieuw instellen" @@ -449,7 +518,7 @@ msgstr "" "Ongeldig formaat telefoonnummer. Het nummer moet worden ingevoerd in de " "indeling: \"+999999999\". Maximaal 15 cijfers toegestaan." -#: vibes_auth/views.py:29 +#: 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 " @@ -464,7 +533,7 @@ msgstr "" "verstrekte referenties. Het is gebouwd bovenop een basis token view en zorgt" " voor een goede rate limiting om te beschermen tegen brute force aanvallen." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -479,7 +548,7 @@ msgstr "" "op de bijbehorende serializer om inputs voor het verversen van tokens te " "valideren en de juiste output te produceren." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -487,11 +556,11 @@ msgstr "" "Vertegenwoordigt een weergave voor het verifiëren van JSON Web Tokens (JWT) " "met behulp van specifieke serialisatie- en validatielogica." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Het token is ongeldig" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -499,10 +568,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Wachtwoord is succesvol gereset!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Je hebt de account al geactiveerd..." diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo b/vibes_auth/locale/no_NO/LC_MESSAGES/django.mo index 9744e19de758fedeafba19a9d4f1e2c0f2ebc33d..ef89bd82ca899e50f314637b69badae05f71616b 100644 GIT binary patch delta 3389 zcmZwJdu&u?8prXs7PYisxwx_{D5q5mMHm4^Q54%Ef&zk6sG<~4J8x&kp1F9=nPIy` z#~Tv7pawA}-WAXo{xBI8HO5QE>?P|Z293$OF}i=akr?7;FHz%e{Qk~4)f)GNXFl(H z=FEF}-sd#@Y0KWB>Zeo2?KNCwVkYr+qcM-7cRU|lpN%)>6#N_~=ti?K6Ja8@;0)CL z*?1D3jmP0?{1tA%Yy*LF>3_hFPQ~wWoH147@M}GII-Y?`@i0HgU>cX6U`&qtPqZ3y zEH+PyCzyl`V5VUY&&|Yn^tVoqC%7BC=s%CY!GEAOIAIEl#7>;f{HC9V7Vuj<7kA?f z{5>+J`5Q8~`6p_}jZ=-`pK0ZTO_@_s3s2!J+>ET*{0^0gU8rQi<@|~y*>_tudaMC}3n&=?vcQw?G595t^6#LL)m)gkNn8y#X zs)2hrIPGjba?Ivh)cqm62*c$53#gR8jvA0Z%6iO z9>)u?HjVsiM_+S8JNOUk2meK7q?OTi6zz%2P~UGx<}w~?;kTg{d@oWq=22wR<~dZ# z-@xe92RWm_y|0Yz?SMQ>s)IW(@>9cqz1HFdY(Ml&?n2%c6L#Wh0 zhN}7(@jIUX9QWa0+x1c#a|^4`xDD(|HYK*=Hl8~PJN4-94rAu?z{}W;U!aO*&g{6F z*Wg0>9x79hp%!`wRh)lDWuS$$=ymNx9l`n7gd33LnQKrP*oNoet=OiezCuIA^9gFD zU*hrjH7>w!Fom5gS7&$?swReUHQtQcz&pwP?@(_?E9ujCvryx8B>hyOvaS zjqz|h?!+uMl3$&jhu7nF)Iz^V{1-OSKZbX%1zT__PQ&roiz>n`sLTu?b!`GZtEOM%C1j1>|2Vok>q;wG5Sk6{sTWPpqI;yc>DL%symo<}HkB1t-z}2Jgo4 zi{hO=h!nbc3Q4Z{BPtXB#s*xY^S_Qbmv9MwADwxC7ZAEM;W1H*R3=`8eMwsj8+%<% zN1ItZ_9pF2((ge(X>0yy2V1b1+#E%(jn4CYLdU|fM%jVr(jS_Y#Ac#3x)aw4e>#jM z8k2ixqY6&fGNKT*qFSn&jda!%s?2K$iaPp31JTu;sCv*D=ZMwBWFjO~;i`6}SrHf z#3pr;ORutuQ-5SQX0whMz0yhJTD)9s<$su1PN;w`Ci27}p;t$*i!QxxH$<)Y)f}MR zM9d;CB~*;M+KCdOqSm#QQ004s3i=AdbO%8$Q?S;_m#abO3|Pl?g3uira>{}AQ)YSA z4V}CV0ykrS)(PTXnDwoj9^2*%uNYV-u$~yT`5`;Ey^iA#1#1##5T`!kTM$83{ zZ*M5)d^Y&=(OGC1?D_VDj;=mC+gBc3e=wUXWTNN7taXYd>$@RK3X5bS*v7;o#j@ji zO6ABrCtLK=&cH}p?UdG@3Dvd5Fm#7`CSTw0RO$y9(iZePH{`thGGE2VG(T^>H1kA< zG1{?y+ztKu{`i>YM@{apDGv`j<*?#(gQgi;t?`m6T9MSIV9`H2h?%$ zq;V&5Km*i3azZ^(7HW&zMjGa<9ASBx(eZ|TTd~2IVXX=&q>T0)Y+um5Dd%{Wj$?Hz qIhgv(KAQ`Qd1u(gic7}RHpBU_P@A^%oC-DLc)2iat9{abwB-lH%Lz{a delta 2246 zcmXxlYix{J9LMqhXem1A%<3qr9rS|kmQrJ>YNyx>)>d8GU9EelYj$5)5|<$eYl|0@ zq{&LGW}{h=Ft)XcOG2`Vh(tm}?2^=r&DupW&Azcne1FfJIqCoTob${)&pGFR&Y8BZ zz1^yy0cJI{ zui$9fZw8tT!~8+X_fErd+VwaTTQJ)!We2S~t^>6Vou3$DA(7zm||7nN#Qac9NAX@6qu-P`+ zk&$K}(Y_EHm0Y7gk?(koG6=J9^lf#hnQX)=jG;Qdfox=Zf|~g&)Ij?bB$sXwYO|JL z1S3eFwi&f#$52Zj`;m%{Njpx!^H_>cP^t5i9<6CU&c$-n$oIJW7f_q>7V3rfQSW=~ z+Rt43IqJO$)F}y*#vMvZ1(jxQbfHooE;ieM<544RbDl%ZuoJcUZeRu8L7koq)+ZeU zsLX_rRk32^&!Su=;Re(|PGgQ1{vvUV(t&gHo z`x~-QuZyt##j$a7QBX;IEOE>ytV{+rR_vzq62-HDh*WF?q%qIpA8n|Y!GM<>|)krngxO$30?@-dxMk3p`H1!E;rYhP*>`m_n zs1j!olZj7=xdbQA+nBR3kI+&!66J)lJCpd7m`5xj`VmUM_FAphzZXFUZ3Qufh!Ck# zPi3}itaNIL{De}hUrUv#NxZ9$SE}@Ol`t-F^~I=tP)EcTa)}Zua|mrL750|5#@c|@ zgm&yIg41Sc1V0bn>1aY7E0);XY&wG4ys1*IP2 diff --git a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/vibes_auth/locale/no_NO/LC_MESSAGES/django.po index 98e24211..fd08d113 100644 --- a/vibes_auth/locale/no_NO/LC_MESSAGES/django.po +++ b/vibes_auth/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balanse" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Bestilling" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Bestillinger" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Personlig informasjon" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Tillatelser" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Viktige datoer" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Ytterligere informasjon" @@ -70,7 +70,7 @@ msgstr "Bekreft et token" msgid "Verify a token (refresh or access)." msgstr "Bekreft et token (oppdatering eller tilgang)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Tokenet er gyldig" @@ -104,9 +104,9 @@ msgstr "Håndtere opplasting av avatarer for en bruker" msgid "confirm a user's password reset" msgstr "Bekreft tilbakestilling av en brukers passord" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Passordene stemmer ikke overens" @@ -130,39 +130,39 @@ msgstr "Brukerens b64-kodede uuid som henviste den nye brukeren til oss." msgid "password too weak" msgstr "Passordet er for svakt" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} eksisterer ikke: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Feilaktig e-post" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Feilaktig telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldig attributtformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslenken er ugyldig!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Kontoen er allerede aktivert..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Noe gikk galt: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" @@ -199,6 +199,74 @@ msgstr "Språket er en av {LANGUAGES} med standard {LANGUAGE_CODE}." msgid "address set" msgstr "Adresser" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Lukk utvalgte tråder" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Åpne utvalgte tråder" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Åpne" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Stengt" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Bruker" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Staben" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "System" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "For anonyme tråder" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Chat-tråd" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Chat-tråder" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Oppgi bruker eller e-post for anonym tråd." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Mottaker må være en ansatt bruker." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Chat-melding" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Chat-meldinger" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Gyldig e-post kreves for anonyme chatter." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Meldingen må bestå av 1..1028 tegn." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Vi leter etter operatøren som kan svare deg allerede, vent litt!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -434,7 +502,7 @@ msgstr "Med vennlig hilsen,
teamet %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktiver konto" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Tilbakestill passord" @@ -447,7 +515,7 @@ msgstr "" "Ugyldig telefonnummerformat. Nummeret må legges inn i formatet: " "\"+999999999\". Opptil 15 sifre er tillatt." -#: vibes_auth/views.py:29 +#: 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 " @@ -462,7 +530,7 @@ msgstr "" "av en grunnleggende token-visning og sørger for riktig hastighetsbegrensning" " for å beskytte mot brute force-angrep." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -477,7 +545,7 @@ msgstr "" "tilknyttede serialisatoren for å validere tokenoppdateringsinnganger og " "produsere passende utganger." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -485,11 +553,11 @@ msgstr "" "Representerer en visning for verifisering av JSON Web Tokens (JWT) ved hjelp" " av spesifikk serialiserings- og valideringslogikk." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Tokenet er ugyldig" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -497,10 +565,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Passordet har blitt tilbakestilt!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Du har allerede aktivert kontoen..." diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo index b8f1690f0065c0f4bb3b094a85f1eaebf66ec750..5c5c71de1c4e54698e1c3a2dee745f2046f8edcb 100644 GIT binary patch delta 3473 zcmZvee{5A}8OPsRrVI+Dbjpwo-qH;Ox;xqxH!Y4r2Sp~XYX@}|D5v+F_MYA!r#t7| z)myUM$c7EkI2B0LWpO6Dpps?rqKihSvBgA9G>R_K7=rsl6Qk3`WRXM?Ki_jtS&6>6 z&-uLXd(Zp6&+~nr_qOMczvfr3tX^`?(8|~y*nFcg&%?sIc+jriYRr20C)lKkWyY)k zE8udt4r+cgd=Kn~?}QJ-cf&!LYrx=E#=mA!JNyq^VocRoR_n#P;WpRlo#607+N+zD%I&|eY#lLM9OyHc?+<%3Y)k3h~c1t`a#hI05> zNZFX@AwipOLP`E3_yPD=sMOrGw(iJ%Ytf&+>F1$?9C!*o1xH{bI%=b1P!2^SEYkf<^;SOo`q86`%s?#7|z09!KHAR z5|*^bp(H;I?}RVIEVtm7P$}r*&Z?+Kp$;rVDKne$EaX*F{VE+5)2mR9{0v@Vqt{_4 z}9S)McTflp0XWK2OoflXC8%1 zVG-_wPr{A5|39Rodwvya!JANu{2NMvMiMIrc0egK3Hg|(dGx}UUf!gOFl)~qs&Y6Q2{;>=F)w#}uJX?QX{e`Vi8}&gQ zbQEfX3futC!fo&(R0^)b)$s4|2vor+u%l4LS%9117odvxd$0k1MEO6C-H$mK0VE3} zxD!*;0&ZB+B&*skY&hxFrA@mD9_OjT+p&0({zN+71H-hh^OJjh6b9+!0u(t#Z9a%` z8It0Wd<*R^I{la=ZcZm3fJ%{vHKua}oBU{Lr~*~0)RyV~AEGmWN$!thl2zAbq3upP zkHKS@k3EdFU@@i&zZH|rYLrOw&&&{1ZS-PlJ(yB7s6pBe=>Cs0;72R@13~(dpHJNi z>f|;|h1`Wbf-N*R?WjgRs=oBkV|~~v>>;d( zWikDQTaKxz$eu`g^@1IvuRFd0`!JTl)HY&MSepj4QLGg!V7iKrVrF*~`4c72v&C{X zitU(Z9UH~Y__!@cUYId`IVZM7FN&NA@1{XiAH})QbKJ#!z9I>y(00r5Kc>8(;2sO0{Q}e!ii4uznW))ZOXKWIDHZJz%prCv?~^j56ktDX)|~ z{`Zi9FnH2;y~KOVNnX+M3wHefoS89$-c;yCUMY?U`Viq-uT*>5hJ6L+^>Q9}?iryW?maow>GhQ}3|1Ig}1gn9cd6iR8UF=hAHpBC$VlTgFkYD&_#3@$t zPRaM|bY(1bN|k%FIXlhk`MKJ(;oE%4pZ`+qnTHC_jrk;>eleJ?WOKFAb=MlIiycWE zpK+#rqQ>@17*r zE{?UTz~qoO5!AgbXKKTD9$vC;AQkIIa^KdncA@Q5!(KZT&QzuxH(yTV!MVlJp-R!2 zKo&dcQJ+&GVY!!168TL|oXNCzbq~#y^Qd_v-A;$i$8)uiwPetejKG}=2)DzMrx`Er ROtzi*WP5w*Q3FvhX1DR}dVUA*d*ZSR$dgnJyjH{KutNCSXl$ zjYxBCtuW?~sdHDuIkhd9t2zIwwAy5|TBTDroYSqc^?ZHrbD#0P$LI4szTeO1^ZvZQ zcX`91w)jxKzt3pvh!9bcZuSng1o)u6nPv8h&+ILHobinjX5TX|7|A_&J=<&p*O!bk zt6_W!Co%qKwApx^kdu7wT%5tU86Uq4E3P5kw5F_gU#5Nn1Sa} z6MyH%KcFW11$Eyw)Q)}mX4^4@&3FK{kvq5v)7XWc+kx54Z#(FaReRTc@c~vb{>)wf z75$8Fq8>Dih3I?8YzmIYCoqO3xEWcC?L!^KVdNIOgcW!VwV|-`uN_RLqZ_6ni?mAA zQ7m=7>b~ENW4V3+btETIJ2{I%yofy8enO@E7S6#!Zqm^-q873SRRdecl7CI~9v3?C zD87Vc*W!%os5s+bjHy*2Snf6oI7y_S}V*ex%Bm81SYK97#7x(>DSCe#ADkF4+?p294= zkAAerk~_`7CmEKYQoRBfV3!+T!m!@|2XwTu5ZhD{)ngsDqZV}Bc^Z|v3#cQxf<^cz zvR2FD*GTtAQ5mU4-QS8T#*L`j+JVY!56)zM8=#}Azlz$~Y+hzrk6~;@o#}Smh#%o* z^s_zc&R$1ls0a0&Pf#iT8#Pe@yDP#{X9H$4?!dVI;SD-^P#xp1sicRot35+-jJ8Sx*D{^TjCNB& zR1zw>rwJ8PJ;9sl72tf-alJq&D|(BR-Fd|G#3Et^F@gvXImA-UpGI(0-divWXA-H_ zOy@Z_SmRWY=@=*j@4R(+jy_z|(WRPRMYSSgnL4y4B0@A0@#TEP2(>z*)$1kCTh*?2 zyqeIfxRy|*rxX01c)uH~@hO55@oGY^plT@9s$6HGvmx~bQZsormrkv_NS#<>{m4FF zVtuebJrT;C@9XW!o0J&Ns|hB43*Yx8Hbt8JiJ{_MzTP8Kr}sunCMKdK1Hu0R3GvT6 diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po index b18273c4..ebd6d339 100644 --- a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po +++ b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Równowaga" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Zamówienie" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Zamówienia" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Informacje osobiste" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Uprawnienia" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Ważne daty" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Dodatkowe informacje" @@ -71,7 +71,7 @@ msgstr "Weryfikacja tokena" msgid "Verify a token (refresh or access)." msgstr "Weryfikacja tokena (odświeżenie lub dostęp)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Token jest ważny" @@ -105,9 +105,9 @@ msgstr "Obsługa przesyłania awatara dla użytkownika" msgid "confirm a user's password reset" msgstr "Potwierdzenie zresetowania hasła użytkownika" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Hasła nie są zgodne" @@ -133,39 +133,39 @@ msgstr "" msgid "password too weak" msgstr "Hasło jest zbyt słabe" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nie istnieje: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Zniekształcona wiadomość e-mail" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Zniekształcony numer telefonu: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Konto zostało już aktywowane..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" @@ -202,6 +202,74 @@ msgstr "Język jest jednym z {LANGUAGES} z domyślnym {LANGUAGE_CODE}." msgid "address set" msgstr "Adresy" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Zamykanie wybranych wątków" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Otwieranie wybranych wątków" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Otwarty" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Zamknięte" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Użytkownik" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personel" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "System" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Dla wątków anonimowych" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Wątek czatu" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Wątki czatu" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Podaj użytkownika lub adres e-mail dla anonimowego wątku." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Odbiorca musi być użytkownikiem personelu." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Wiadomość na czacie" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Wiadomości czatu" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "W przypadku czatów anonimowych wymagany jest prawidłowy adres e-mail." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Wiadomość musi zawierać od 1 do 1028 znaków." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Szukamy operatora, który już ci odpowie, zaczekaj!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -437,7 +505,7 @@ msgstr "Najlepsze pozdrowienia,
zespół %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktywuj konto" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Resetuj hasło" @@ -450,7 +518,7 @@ msgstr "" "Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie:" " \"+999999999\". Dozwolone do 15 cyfr." -#: vibes_auth/views.py:29 +#: 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 " @@ -465,7 +533,7 @@ msgstr "" "oparciu o podstawowy widok tokenu i zapewnia odpowiednie ograniczenie " "szybkości w celu ochrony przed atakami typu brute force." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -480,7 +548,7 @@ msgstr "" "powiązanym serializerze w celu sprawdzenia poprawności danych wejściowych " "odświeżania tokena i wygenerowania odpowiednich danych wyjściowych." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -488,11 +556,11 @@ msgstr "" "Reprezentuje widok do weryfikacji tokenów sieciowych JSON (JWT) przy użyciu " "określonej logiki serializacji i walidacji." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Token jest nieprawidłowy" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -500,10 +568,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Hasło zostało pomyślnie zresetowane!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Konto zostało już aktywowane..." diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo index aeda549472a17de8771b22063e1f6c2864fc33b4..49e80df29c80bcebdd4b33a10099167eeb89b0ae 100644 GIT binary patch delta 3460 zcmZwJe~c969mnzKyt9S#@VLW@6p`n+0|a5=PQV|W%5i`SQV<06v>bE0&)tsh&a5-L z(5tZ<`%5uKZN-Gd5=+xa+Sr74O-%g5wk~N*j5h5R`%hbKZPK)~rj4z!R!!fZnK>${ zqu+ZyGrRNr_@+nzLBHR4j@RI4$^u=HvEaJ@Oxn9K0@*r5mQ#>|3Q zcmd8wJzt6!;~M-FZo|*uE-bbXxSac6@KP^+fNjRqjpc29aWP(j>v4(~Ca{3(FEqyI z`L{cbIUn0+rvuDJIxur_Bj39eS8zYtl@9O-Zs7hTeir|MT3|;vlf-2>kMYfZ8k)ct z@G5*1=i|?iKFuGHvCTWE6}QeYhW||`e^`|1MNK@13vmRQv-u(_6NgdBd>oa5qnSIT6X7|N94JKvo!^L<6m5~=vGyMrZh(E^}xQ{KY)E+>k z{4g%SlbGieyoNdM2RO6Z)E+8RhfouEG<$v=^}9hj9px zV4u$a>ok<=|Da~vP9e3ax=_1$LFQJ}UO0qG?IXAqzk~hwH&m(@@?)TyuS4~>6}35U z#q)7Ad+zWG#y2Gz+Jr|j!XM%7xR}wkS-yl1;Nz%c*G;XkDd5K)c1aheRvwx@%wlO zcJb2Pcn_*XucLPR8QhE?p-Q%CApLveNDOAU=;zImmX4{qNCh9}2 zYzVJHhf4J^?8XyV#20Wj_O40$UxUib9jHt^fE)sIi|T)XP-h;&M3Y*^s9NgM?&X9f zmpajP1F(7h9mKs!%NUDegf{F#;%0)AnOuwbTOoSVTQiDth!UZn_ge`w6vzHV;G8Yj>T%VM zIqTWD>Wz=vTI`~n87_KNTXu2mO}KMz;`FXsjGR~ac$*JOVeD+|N-ke@1)F{)dt5ME z!pM3-7)+MKT734yo4la$)fwMtsc%omVm|3~`g6Jd)dN@Ce9?#p^5_2t z*%^fg{enwoZyCvzJ-=kfKVi(A+2tyci(OESS@a&3YhBP-*8W&)*KTFN?4FFPu59#4 zVj#4J$74 zs!XXGl8N{b15buE>y?zs$rZL3mI`)kvZrxb=f;lu4hD)VVGuWuA9N*Ka0k_AWNT#> zS!*7T{LmIWtI1Sc&TMyqYE|ZocFe1~l@+fNPCpIeb06R02SxAPN4GT_6+a)I{o-)i z!4{_iSTD9Ey%VRI_rt&|c(F-7Erez#HL}&|9=xFWT;P|(xG_5at(N)_`{?Z4SOm4y z(ETJot#DRgM}>#RTvQDq@}o~4F^mG&JmJ~!e_0@hZe>#Mislhc&x9m1kv3+MYYZ*; za@*X^Nv_OpU-k7UaGJ)(OFiFfS=&5p1D9tPrl}>(S*Hh^$Ekm4lg^VWryXmBPx!s7 vuiebSp=~Qsn6E`%z<2pi#V%0n?w(F*HL)V!$RdKyQ2$2$HCl20Y? delta 2259 zcmX}sX>8O*7{~EvX@MR~FDR{8+b&Q!EiB~_Y%L1~YULIv&_Y>hQcx+EzA@@jm4I>u z%8@pK1W0HJ#%NY3FE~t_5YB`EFN`KlFd+ir$QnopNAUaGopsV@KQpua&-KiI53YV* z7wXPR+-H<}B9ACdF#7>(d+|Zplw`KbW7dSjY2QyayGc7cg=g?ys@ZD#XZJCiLi;oh zqWvPxYycLd$Htw6V`*388@L^_%|dpJ$^<&j;G6gaGcbb>s^&xHFhBOiGGuO>ha<2S z3veqkr?sQj-hsXG9BSbgoDs~VoySKO^II{M0389;K;I#Mc9ah`V<)jEcA+M|1Xyf4#1HZz@gZPti=wXQgIx4#I9i}-bQUGU+1qK45p$7Mj(r{GE^$&IzMyY zZ^i!fx1v(=D{3ca(Ti7*vF#7kkw3(Vn9D;-&3x2Cf~Y(2MSsp;6YZj7GoHYu=+B7_ zv>mme!>E=2hFWOEnZPk0b^sOQ(Cp8MXl_alFHJeTt?qS8rAM{*an z(nq)jUm+LYHnUtE?M~E@ci>ytjVrnJFYy;#!EQ#=pUIcSJ$NJV3jOQ3AlhJ=&#aAh z7rsOL(+~;L3ACUt&q>q(*HIIA2FKop0(_tLXdH-ZQ9Im&tkI64F6VjFYkV1Xr~bhJ zMvy-%VYk}gVpQrw4OEoNM${$x(%FW}1^Pr~%thcj9O4 ziDz7YC+c;*gdCPV#SMD@(}%DcI=)5a=r3%-hp5}WmUGvDA=E;5pmxxLx)bfFo!-GD ze2g0B8R|q+hMA4RBAki~@m*}ee7*lSsFcwWLG5T1H>v`sV=vr>y>Sm};8x@}#C}57 zXlIdZ*&WpL$!t?8EkrH26xCmeI;lF;!ZxCx`E4haS@=6@$7$q2|Co=;*%;IS)wl#3 z@e{m=N>K?nNw>Tbr(q2$WrtDUcc4z-Dr&r!sFU&)bE+D6I2A6a1)M?DC2B(L><~`C zPE5wrlFQbjC})?)9f za;hJp$%HP_$At2lKq${C#4@6U;7Y{q1S;q8Qtm1rIOoK_z%*rc5|v8Vsb9WuL&`o+ zxWRigA)J>{;c4EHIVc>-40w|kYzTfHEUXVUHx}lE`xSI~!Zp68#PE}%c2D!oA;sa+ Hp+WC|jl|Sx diff --git a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index 1e3284ed..f81b2379 100644 --- a/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Equilíbrio" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Pedido" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Pedidos" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Informações pessoais" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permissões" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Datas importantes" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Informações adicionais" @@ -70,7 +70,7 @@ msgstr "Verificar um token" msgid "Verify a token (refresh or access)." msgstr "Verificar um token (atualização ou acesso)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "O token é válido" @@ -103,9 +103,9 @@ msgstr "Manipular o upload do avatar de um usuário" msgid "confirm a user's password reset" msgstr "Confirmar a redefinição de senha de um usuário" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "As senhas não correspondem" @@ -129,39 +129,39 @@ msgstr "O uuid codificado em b64 do usuário que nos indicou o novo usuário." msgid "password too weak" msgstr "A senha é muito fraca" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} não existe: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "E-mail malformado" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Número de telefone malformado: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "A conta já foi ativada..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "O token é inválido!" @@ -198,6 +198,74 @@ msgstr "O idioma é um dos {LANGUAGES} com o padrão {LANGUAGE_CODE}" msgid "address set" msgstr "Endereços" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Fechar as linhas selecionadas" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Abrir linhas selecionadas" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Aberto" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Fechado" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Usuário" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Equipe" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Sistema" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Para tópicos anônimos" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Linha de bate-papo" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Tópicos de bate-papo" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Forneça o usuário ou e-mail para o tópico anônimo." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "O responsável deve ser um usuário da equipe." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Mensagem de bate-papo" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Mensagens de bate-papo" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "É necessário um e-mail válido para chats anônimos." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "A mensagem deve ter de 1 a 1028 caracteres." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Estamos procurando o operador para lhe responder, aguarde!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -434,7 +502,7 @@ msgstr "Atenciosamente,
a equipe %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Ativar conta" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Redefinir senha" @@ -447,7 +515,7 @@ msgstr "" "Formato de número telefônico inválido. O número deve ser inserido no " "formato: \"+999999999\". São permitidos até 15 dígitos." -#: vibes_auth/views.py:29 +#: 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 " @@ -463,7 +531,7 @@ msgstr "" "garante a limitação de taxa adequada para proteger contra ataques de força " "bruta." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -478,7 +546,7 @@ msgstr "" "exibição depende do serializador associado para validar as entradas de " "atualização de token e produzir saídas apropriadas." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -486,11 +554,11 @@ msgstr "" "Representa uma visualização para verificação de JSON Web Tokens (JWT) usando" " lógica específica de serialização e validação." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "O token é inválido" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -498,10 +566,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "A senha foi redefinida com sucesso!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Você já ativou a conta..." diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo index af4349ca0a17491e05495699291099ab3d20e21f..29191706033e8c1b1aee86c64be55470f04d187d 100644 GIT binary patch delta 3459 zcmZveeQZ_b9mk(qrdX(@6vYmZ(^5n_xV$+Kc@bJI2ty0CvQ-D3-utxo;JxS8^MY2R zH>8RqSpWqS4I%i4Gf`Qlxh5w3;Wp_u-5-(-_lIsV>Xw)+%-6)k1f!qtImas7p71-L z=XuU~e(%pM2l6kJs_#yp^n_u=$ZTZ1-k9UCbO{f}dzTt>6?`8~)kcFcji3=ufwQ3Y z7r-mvweVuN6` zVuEgCW*D;(v_L89hd6CwsFXhnm4PRq3?IwZ&q5hG33aXp74cd4Ap8jKge9U>AmgwM z--1;s?xJvttQS&db0^gP5WE3K+5XE=DSs78(P?-kJPWUe=b%c^GSirA;0CAwJgAyK z0EyL{fNNoGCiz!HpRl0_zJNOL6;wu=(5_OnXIu~UegI<2l%O0RgL3!~q;1S`NYLha zsFeQ}u7>}HDosag>d1;#^3U9C;vqvWd;~rS2VgyUl%icw4uw#j?}u{abjH6y8Tt_7 zyP1wMWvUY@;w4b$yP?kAo~?^jCOBmtfb-!|sEnL~^7MD`QFsPUhC69trS>kUlpla| z;EOQNEqD`N%X&F?Rv8(F(i1~v>S3r19fo{rs>hkAJ5ND*{u=xTir#^$tlw)ss&3#FbE) zoC8;5-^^z+7w(29U=T!3Ngr;1swSDze+4GVwT+!Dpa; z$ex38@D#*^c?(uoGpSpWmS7E(BO_3yIGnA|z%8slhDzb}OVh}@p}Knul!0B4wlNjh z4i7^0)Jsqqdjrbh51@W=|Fe|*%hUR0X*XXEuV=j$?tu5gY4Fb({|@OJa}KJeEi}eM zFbB)<*H8v$QMc)E1(f4GP?0|dRl*mb0)K4<`Cq`~JR9t<5N=EI3kZ_2G2?A; z7vdpX5v4am)Zx0WO0x#NmHcO>5AH!WAR22B^~4S>vav<4L}MHBQ{;9nvZ4CUKqztY!*y%6FBG!*o$waTmH)euZbY4aBce{u zBkEK&m&R1&o@AE(+6^+FjLb!DM!3q!Xy-YCw53b48@3=NM2)>2F&o3s8}_Yr%5gP} zoI&fjP8hjELrxspAZNOZZse407`nsuf<>6FqGDj(!uRLAC{;r1gtlb!ku5msC)swv z^i%@J^(+2pxe|vHFE_h>?cvFf)m68pw(uu)XIU<{Z0YjroP5y@T=WHD&fGd;{p9h# zMtXzFUaw#i?;R}Jvg?(cq5oquXLi_;z=qb3LW1rmT*vygg$;-5oBNaj(>EGMwrupK z_DbVTb)9a>D`XnI&^pJfmAv~CedrAG_Vr^P+5-ycgx4fx zbR%ohx1s4JV?peM@t~&yC&l#2wzhlLl#5h8ch7%0>Ux8?J5k82jy7iq4SQk63++yr z?TG`Q_~g@fp<*F)Nm+pcx(dcFP6|DP&X99>&nId#ubiuSbKaRWyEjXY>GM?9xMcb# zGFR(rKUudj3rs0n90wlJrwY){3CFj2j0MVhW^Jz;;>fvqtJZgqkHyjWSb3thSkJqv kK9TQ5g7L9%B=!qT3wDpY$Z=nPDzYPy;%ck4cMLav1Nn9((*OVf delta 2246 zcmYk-drZ}39LMqRxyX^5Tnt484g?5knV3qT1jkF>(!er|AVpk~7p9d?=imh7)WWox zrTB+4%W3?j$7XKYN~f+h`={E&a(J9pD3x+L&f*yS8`CkJ3soyX#;`IRj#bFmR)^!U z5yQ9x8PkrT=6)JO_yua>mz)EbK|6;_Cga-#DiJy&s0Vc;e|Cfmi?Ppe2wp%9{IzR; zj~eJI>b~o!75g&H+A#;~u@|+FJGc)0tU}LSkI9U09aPv=d)s~RK33EI$o2n3AKrpgirrR!~GmH;hLnX;rABsCBM& zpYOmC^!K8U1Y?GKPYJD$z{7gIS;OIz{> zYNq|T9sflV-?lMbZSA|LEkBL9cnw>~`hW0eT+V8A6jgk<#Ba7*U&1d*kWQ*!6_|a> z_hvrqy$$_Q4oEvtSmZsh8Yj_i!hGC=?4q4O?Z9Q%A7s{AQ86+{D@Pq=Eh-7?Q4@a+ zt8go7r_P{`>^Ic+qj#t%`R?Hp7+`s_961eJgBqXokZ=# zU#J27ER$Ep1Pc#xrGUdTcVh-^P@dA-ZBoJvtt;Y8g z9H}iQ%89AOV5z4v+clbP0;TJxfV}Cy@L8d8!XkXGSB(!;0HKNCtFEn zuInU^EVe3XpD(s5\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Echilibru" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Comandă" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Ordine" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Informații personale" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Permisiuni" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Date importante" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Informații suplimentare" @@ -71,7 +71,7 @@ msgstr "Verificarea unui jeton" msgid "Verify a token (refresh or access)." msgstr "Verificarea unui jeton (reîmprospătare sau acces)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Jetonul este valid" @@ -105,9 +105,9 @@ msgstr "Gestionarea încărcării avatarului pentru un utilizator" msgid "confirm a user's password reset" msgstr "Confirmați resetarea parolei unui utilizator" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Parolele nu se potrivesc" @@ -132,39 +132,39 @@ msgstr "" msgid "password too weak" msgstr "Parola este prea slabă" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} nu există: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "E-mail malformat" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Număr de telefon malformat: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Contul a fost deja activat..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" @@ -201,6 +201,74 @@ msgstr "Limba este una dintre {LANGUAGES} cu implicit {LANGUAGE_CODE}" msgid "address set" msgstr "Adrese" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Închideți firele selectate" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Deschideți firele selectate" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Deschis" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Închis" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Utilizator" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personal" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Sistemul" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Pentru subiecte anonime" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Fir de chat" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Fire de chat" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Furnizați utilizatorul sau adresa de e-mail pentru firul anonim." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Destinatarul trebuie să fie un utilizator personal." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Mesaj de chat" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Mesaje de chat" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Pentru chat-urile anonime este necesar un e-mail valid." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Mesajul trebuie să aibă 1..1028 caractere." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Căutăm operatorul care să vă răspundă deja, așteptați!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -438,7 +506,7 @@ msgstr "Cele mai bune salutări,
echipa %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Activare cont" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Resetați parola" @@ -451,7 +519,7 @@ msgstr "" "Format invalid al numărului de telefon. Numărul trebuie să fie introdus în " "formatul: \"+999999999\". Sunt permise până la 15 cifre." -#: vibes_auth/views.py:29 +#: 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 " @@ -467,7 +535,7 @@ msgstr "" "de bază a jetoanelor și asigură limitarea corespunzătoare a ratei pentru a " "proteja împotriva atacurilor prin forță brută." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -483,7 +551,7 @@ msgstr "" "intrările de reîmprospătare a jetoanelor și pentru a produce ieșirile " "corespunzătoare." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -491,11 +559,11 @@ msgstr "" "Reprezintă o vizualizare pentru verificarea JSON Web Tokens (JWT) utilizând " "o serializare specifică și o logică de validare." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Jetonul nu este valabil" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -503,10 +571,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Parola a fost resetată cu succes!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Ați activat deja contul..." diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo index ca06fe9d9aa3753d419aecfa22197007055cda58..bc698ad976905a7c94accd51e72421aef17c9bcb 100644 GIT binary patch delta 3673 zcmZ{mdvH`&9mh`y2&F(?KnTyvD;P+_qXmk@l7OX!7NJ4PqZL@PH`%qD-E{A!CDyt$ zX-hE?uqlHxm8MQdovKqqmS_lhbV}`LXR7y#jCICp)ju3-2VXPJIAdr0eDA$sg48ql z-OoAap7VR1-?^KU+0z|)+20nAKVxVu$Xw*jd}GeR#6%vn_ir&~KKwnLqKV1IOa)Wn zt#A(1{4zKb-T^-W?}Ia79gO86a5-a-O^e}w;CN%Q#$vY?E`=-LMtFq{jW7x~PBSLX z{L2N#On{RM0|SK+1*Q~kX5Cy^$@oxFV4xG$Fz$h~;oqSGoKlRFumYB0-yEbP2adw^ z@FbiA--75ge}LFF|AdM-zr+~+OaTvqGK--cuYwEU0f^7$i%^+30hP?tP#O4o$jh(@ z`{o)QbQ?3>m|9Q*rDzYtY10Cg^5ak$I0I$)#c=#>C_~?e+Lwch_zHXyUW0pKf+!Wp zo3IJ~5@w}%GY6;0c0rEWJPbA805`!*IDY{u<-<^lF2h;y3M_{oLLEU#sWG2~HBbS> zq0amXNUWwCR>NE=`By}LV?q)93u?nhP#GyeyN+T}$h)B4AAs002`IEM)k0xpFwKxJeA%G1~3arkpM3GStYmD1E02de@@ zn^qdLp9Lr27WhZVpINqwj|toh?}4vCwwS-b$KmYN#(V}o50$}RLH^7~JX8xS*HAyO z8WzGs@XN3nZqWVzD;=_CDsB%pYz?^^?q>dQ$P19*%%nSlOs#_LjQ2xj=sma&u2>ta zI|3In{tEQ3CzM0Ekgvl!?3;J!XraaKt8g=X7S389e3-i70OLML8JOlfgJSB0N^Lh( zWUs-`!jW)(+J@l$JgCf6!db8m-VGmt*{A88r?Vff`&97BJPjXW>_MINZ5z26a37ou z2cRPPF{Dh)FQ5YW2P6q*dNlg>RjACpyeUZiV>Q7C=Ox(5{2Ne??5qur=qNnQ_y@J* zpCC=)<{&lqL3tj9O3_)Uh~9(PFvVEMdGi4LJUj`N(huQ0IDtxh6)uJf>>YSN{4-QB zuS2OEZ-9C5ex3hegroIStjg7yI*1IZ%|*ufy&yVu3Dp0lt3N}JF-=FQf?GRgPTj_E zOe`iH_GRDyby75`aB>uiK>PUi-SlU(f6PT$spsATacxQ8lMIKpBY`eTSleTR&wPc-)b;PzJmXnDzG*~T;ovt!lVv&s1WIIlz z(Y|5e1fxtWZAYSG`@Be`9NTj2gk7JpqgJpaoQ|5Usk9YIrjo5qsTSw@%X=fq+|!f3 zmY3ZT*utN{oz+!Ut5>bL)2fd}(h>Bfohq}l*-rY8n~m&Bryh$(ZQpwfOLkKvp0FA| z#%7hNvzyblV<$5XLGK}4%TDGhCZEbL+N}(j-K|c>ZZdk4`_a_9^Oi>v@o1gInG~6D9>;KNs>O;V zl*-mhE0#(`ts|`qbMp(fOeyJhhuuqFyLa5}@!H%z`kl|ODV^p$$4E0nUWYr_RkXG= z%S(Pi-EXpC*gfx^U_9jZyM311YmIKd>9u$2#@FZEey`2z9No}kTz|&xA2V~-?QsXZ zV_t{9((T2A^WL!?%ntePU=hRk)^FUgYdhSF#(jYZu&K4fzJG(-<2_@!BknMJhTQ?A zH+N`GOMdoaV!6QEOYRS~-SVDdaKY{Kjxj+p@SA!G3Wj(6?x5T2FGnGnc?tE`{r;aJ zSqQ=y8^z4)VZ4G@Js43`ePp|AyM_8oO3PP4A9~yHLJ&37lx?^Y;&P(xU|q{Hg>o(fjEJzbINvfN<#Z^o_vzc~z#nQ+mKKYbib zJ4)Noa?0weT`_ASQC=kdU1zJ8cb%!&vF{sR2ch`YGHBt|h@VbX)-VcsDmi!cQN%hO fP_OhU5oDV|k2_eY5Q9VT^MkR@g}L`DUYqe>4g5fo delta 2251 zcmYM#eN0t#9LMqR<)SEDk$d&x6_6Vuk)jYqnI!QbNoXqI1Eyf4G;=Fft8{D2Tk{Ex z$PLlys?FG1l+Ed>=~}uLo3mKUjckSGqS{KAO)7&S}S`&8z0<8#c$e=q|xxKOn`qz@~_DOiE@ZH-uj zEf~j6q)+<*HTF}Of@e_!Kj%A&VcI!dBJ^*?RI0gAjryS-$Up1j!es1I9ESs_j=%ET z-=R7hMtwJensFdv_A2IJGaf-r zXZ`1$n92Pks4Y2xn#maq;UMzc_5*6kui*lW@sYNs2{n+XP&x2&ChM<`-r~kC{0P@! z=``<$x=;f;iW>PRsDY0923ZDm6h&@X6>6o{qB?3teg6XLyPbafAo9=pW2}Dxl`m;& zN&ZBQ^l#jQw~)lQT?|)C+l^ZCQ#b=J<0i8HUp?pKv@x4{?(fZIpBc#zj^qCKGtGYC z{!euFV-hRIkLbNaiP>h0sEl9<7BHQqxEky5C>G-t+=ekyz83eR27VDs@g`~u=8*{W zW#vesTPtqI4qSlOP{+J*p7(yD)~__;N*-+RJ&A?1$J4uJUW_}i8JFQDd=O_dYQ5Kn zdDw}{sSh!PCw$Lh6YW9Nd%5>Ac%A<$D!aLn$u!6pdj~&52bCKg_j!A`57YG=HM3*5 z9MAaoL-%{nvr#KE2iZMqz(;Wl?!@Ex1eTSNFFOC-RMvCjTV$23=m9bm*I+81M$KdZ z<9GozgX_pA7GW6}gVmu{>J^-YeK-}*qu&1+HKE(6_p;}kt)hRcrP7OsaT=C97ws=l9V~m;+oG-5M*Cyrk)?B#Vpxv}jeH{& zEm1FOMwjpr%&72=-3n}_-G%z_D$c+lFZE*{YG#A@IR1fbvz1kP18>Iw?Xj|!ijtI) zuqU}{v?@w0l{7+ol&JuoWyl*lJ05IUB*#44hN&`N5xw1stqR%Q(` zkrT!4qo(FvM58K{ z)r1nViAb#EQcb8VAvU-*@4r?ZGwpK~p-kRLDB*&HGF+#lmEc6Vf21OqOehz|N~K?^ z_gyje06ETKHzObOZ}O+WoXx4d0cUflFX-fC)CPLq4Cgze;hK=s5Pvb)GfpU&axD5Ev~S$^ diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index d957f6df..460bafb7 100644 --- a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Баланс" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Заказ" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Заказы" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Личная информация" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Разрешения" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Важные даты" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Дополнительная информация" @@ -70,7 +70,7 @@ msgstr "Проверка токена" msgid "Verify a token (refresh or access)." msgstr "Проверка токена (обновление или доступ)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Токен действителен" @@ -104,9 +104,9 @@ msgstr "Обработка загрузки аватара для пользов msgid "confirm a user's password reset" msgstr "Подтверждение сброса пароля пользователя" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Пароли не совпадают" @@ -133,39 +133,39 @@ msgstr "" msgid "password too weak" msgstr "Пароль слишком слабый" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} не существует: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Некорректное письмо" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Некорректный номер телефона: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Аккаунт уже активирован..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Токен недействителен!" @@ -202,6 +202,74 @@ msgstr "Язык - один из {LANGUAGES}, по умолчанию {LANGUAGE_ msgid "address set" msgstr "Адреса" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Закрыть выбранные нити" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Открыть выбранные нити" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Открыть" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Закрытый" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Пользователь" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Персонал" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Система" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Для анонимных потоков" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Нить чата" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Нити чата" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Укажите пользователя или электронную почту для анонимной темы." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Получатель должен быть штатным пользователем." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Сообщение в чате" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Сообщения в чате" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Для анонимных чатов требуется действительный адрес электронной почты." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Сообщение должно содержать 1...1028 символов." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Мы ищем оператора, чтобы ответить вам, держитесь!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -436,7 +504,7 @@ msgstr "С наилучшими пожеланиями,
команда %(pro msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Активировать учетную запись" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Сброс пароля" @@ -449,7 +517,7 @@ msgstr "" "Неверный формат телефонного номера. Номер должен быть введен в формате: " "\"+999999999\". Допускается до 15 цифр." -#: vibes_auth/views.py:29 +#: 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 " @@ -464,7 +532,7 @@ msgstr "" " построено поверх базового представления токенов и обеспечивает надлежащее " "ограничение скорости для защиты от атак грубой силы." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -479,7 +547,7 @@ msgstr "" " полагается на ассоциированный сериализатор для проверки входных данных " "обновления маркера и создания соответствующих выходных данных." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -487,11 +555,11 @@ msgstr "" "Представляет собой представление для проверки JSON Web Tokens (JWT) с " "использованием специальной логики сериализации и валидации." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Токен недействителен" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -499,10 +567,10 @@ msgstr "" "Реализация набора пользовательских представлений.\n" "Предоставляет набор действий, которые управляют пользовательскими данными, такими как создание, получение, обновление, удаление, а также пользовательскими действиями, включая сброс пароля, загрузку аватара, активацию учетной записи и объединение недавно просмотренных элементов. Этот класс расширяет миксины и GenericViewSet для надежной работы с API." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Пароль был успешно сброшен!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Вы уже активировали учетную запись..." diff --git a/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo b/vibes_auth/locale/sv_SE/LC_MESSAGES/django.mo index eb48ac071a7c7264f64d1245d1c2b4d32bddda2d..0993166fda501f6bf7718faa1b7421fbd1ae5672 100644 GIT binary patch delta 3422 zcmZvddyEy;9mjvTOGR8*7F5bZoL$}syTDQ(V1->|f#T{Ggtcga*}b#(-tOGF>&#r* z70H#VCA2<+8XKdwiEESESei>PY2zcg>Ob`n3&zAyqb5z0rXiZfCXF@e=Q}e?*VdE$ z&F7qR=ltGh_MZJ;5#c&?f z{!(}uTnE1acfd>GPFR?Pz!j|D<ovqy}a{6xeLo&3p6VO4j>ZQUmwHO{`DAx$rZn0GnpwBwP;XVBhvJkpn-1SHlP4 zJopAgr+oskZU2CZxM7wVf7Z-{pll(Ois(}|6v02C4txofk!G~36m1!=hx&al#FqI`j^6|2@I#Qcv8NzG+pnQg z{tCPn{tc=$i{_+`bj~6F%xx$3yz6WLKuMppD zCd!nl6;Kg(K%L(Vb#70#E>xM|lpTVL;iFI)`8|}Uufn779XJK{)51#a0jQK8gO|e- zaFAQ@HeAJeEq7KWIsnzgBT%J10+p$sK?PR*ITLl~3)#jgcmhR#go@}cCsp_>s1m&g zb?_|gfSiPkwNPi4fg5z)sd>%^A$!vWZu48=`w(0)2 zEKgIi4$9N+jN73c>w}8)2vqHU2jxH=cEk7Kx8PjTrKaqI+$_sO={pRkzc$UHEo#9Wj|?>@56GoIS%y#y_htW8b%Q)3*&<; zZd;MPNOQJ%4OE04(va=xx^df*aXrrtyNqFccCBpIq}1=)rC0NI3SY(P|^omyn$JG%cvEcj?8{~#z!@*k`RE|h3&Sv;KokLiy}AgePt1)tGEz)Zf@e7AN+FUIg#gkgRz%$(pR$Wob{AL z#|_HCXsKL@&i}a04QlsJd1O+xH?@U7sXJ@h+t;jKdyO+#a6=b;VbpFnk9a}y_RVvtYXiwmAp9`Qmq z#-+GSCZZo=c(hz`TwkdiUFj6ce$E*fZLKY6?ry5~mgCsXyP+32rTQ2iIS0uEt~#iR z%7N>GTIA48Bd`uC TD>*ghB;h-ixV6@}u-fz=ftVnE delta 2250 zcmX}teN5F=9LMqR<$`+QDqIppx$+<&sc8W|fgoP=s!5Vhge8U#EVQMwHJvr_>X3=f z@(2dw$pF z?VYW$q3qO?Mrk9$M2+9<1VA)G;bIAC_4c1}9a;IA2GJLqp5YgSMD zODv}Se4N>2EXYiZTa9yQH{&EcjyYyAyF_I^9XBx#|H3TH;)ALcA#+$czJRsJ+_na1 zVha{vH!`Pvj#_&kj>d0M3;*6Zf+5;rKC+qLW>bmK5kU>qiTtw*e6Sh2fob?1YT{e2 z{Qx!5kErJ!p?2)cHtWDJHse{;M*hT|n8GeJ?rzLremg*gQ?+C6i%+qR_IcO;7*lEg zjv8nLbI~{6Y#L6+moS1a;x1$@_8BS_y~rbW2W#*VYD4)tf9;@ziXNDWEYfOGsaWlN z&wbyG6X-vSO34?foqU5q96-jlLDZ2y!79w6|&=IGfW6(r7NS7@}ozw=@M4M30zmIzEuxp<}{#kD>=U+;tpO%i~ z7t~7sz$5rCa`CN;ike^_YA2^qcj7WKmJK5p+0siAJI_Ncv=TK=jcaej zIkel5sq73YWj9f&kKJ~ad#Du+;>#G|Saf7ns0B1&J+|UpJdb3{29Y$|Q`CTI9FG;r5;wSPdRWC-<^JVEXJZ>+{KHQD!Eo0d%)J~gFmu&~?R$oFbz(Wn(kJ|A=oQ1zR zCy{tfxEyuVTTvV6Lj8S@Yxkl~t`94i-|kXrLmxk9`r;kbKpn_EvD2>qEBui5J=EVf z@X{+q*H9EtR+U\n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Balans" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Beställning" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Beställningar" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Personlig information" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Behörigheter" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Viktiga datum" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Ytterligare information" @@ -70,7 +70,7 @@ msgstr "Verifiera en token" msgid "Verify a token (refresh or access)." msgstr "Verifiera en token (uppdatering eller åtkomst)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Token är giltig" @@ -104,9 +104,9 @@ msgstr "Hantera uppladdning av avatar för en användare" msgid "confirm a user's password reset" msgstr "Bekräfta återställning av en användares lösenord" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Lösenorden stämmer inte överens" @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "Lösenordet är för svagt" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} existerar inte: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Missvisande e-post" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Missbildat telefonnummer: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Ogiltigt attributformat: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktiveringslänken är ogiltig!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Kontot har redan aktiverats..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Något gick fel: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token är ogiltig!" @@ -200,6 +200,74 @@ msgstr "Språk är en av {LANGUAGES} med standard {LANGUAGE_CODE}." msgid "address set" msgstr "Adresser" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Stäng valda trådar" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Öppna valda trådar" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Öppna" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Stängt" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Användare" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personal" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "System" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "För anonyma trådar" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Chattråd" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Chatt-trådar" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Ange användare eller e-post för anonym tråd." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Mottagaren måste vara en personalanvändare." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Chattmeddelande" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Chattmeddelanden" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Giltig e-postadress krävs för anonyma chattar." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Meddelandet måste innehålla 1..1028 tecken." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Vi söker efter en operatör som kan svara dig redan nu, så håll ut!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -434,7 +502,7 @@ msgstr "Bästa hälsningar,
teamet %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Aktivera konto" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Återställ lösenord" @@ -447,7 +515,7 @@ msgstr "" "Ogiltigt format på telefonnumret. Numret måste anges i formatet: " "\"+999999999\". Upp till 15 siffror är tillåtna." -#: vibes_auth/views.py:29 +#: 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 " @@ -462,7 +530,7 @@ msgstr "" "säkerställer korrekt hastighetsbegränsning för att skydda mot brute force-" "attacker." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -477,7 +545,7 @@ msgstr "" "på den associerade serialiseraren för att validera inmatningar för " "tokenuppdatering och producera lämpliga utmatningar." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -485,11 +553,11 @@ msgstr "" "Representerar en vy för verifiering av JSON Web Tokens (JWT) med hjälp av " "specifik serialiserings- och valideringslogik." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Token är ogiltig" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -497,10 +565,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Lösenordet har återställts framgångsrikt!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Du har redan aktiverat kontot..." diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo b/vibes_auth/locale/th_TH/LC_MESSAGES/django.mo index dee454c86214cd2faa65e7e0e743cf7528f90a47..a7b3b7b824dd50bfbfafc8e7c1591d85871f4ec1 100644 GIT binary patch delta 3937 zcma);4Qy3c9l-xxJ7k4YpmeOX!0pP1P$=IUl(DsZY<%paf~6ZG<a=; z|NYMY+c$p2IupO=(ClX`* z`BIUaVexotU_9ginG9F+UKN~&-a5e=_&RJrKLe-0zd{Xg>_nV|b6^GbWd{>=;8A!d zd=^&1Hy~%qZy>hiBd8GSmTssi?}M6weyE0zhWbgUhE7A>mxCJdW%wBU5VpWLQEDKs z!!CFQX7u3I6iy>+f|OadLtXEH_rP?xehzBNUxj+mMR*&$3}?YVK`lYqWRXw92B-nV zpw_$>6001Ccfs6b@~;tHV?iVM8`KT|fSQp~PS;Z09`bIe&$mHrNgS%N z7$j&p1vTYAf-B%3pq6Gvg>_^}1^H(#_wl2KBJgSW7~BR6$)g^$1FAzFRL`G*>d3{A zZ$mZo0mOHi$YGkPxlkis0CoQwsQb2tdNjiXr=%CogomMK!7p@lWI zJE5lh0GtZXz&38dn=p&Mm^-W2_KlFgh1KXqG>CE*Tmm!enP|SoJwR_eK{Xy6a3-7cwegx|KSy&E#3}?fu zkR-}KVK1y)uHT1@$N&?q-LGINEL>q(23yc;LiWOS=$AuQ)Y}ZS!kw&-UTF=-pq6w1 z>Un3NHsx!f{)>?B!Wj1D&rDXqmb*lL4f|maOtPr8`aLWnrDN_ES%^NKG~k0YLXEUH zsMnOJ`O3bT!V*U`5Ifp zQz3r{u_eC@Iex9}p(fbH`f*4sQo^CyY#X6E@>QrMIlYej>%x`r!A`)O5t>pWh(^NA*^4*!+JHa)Zo&Hn=h7>a@XIkuivlvB(}X6LH`!WHd4zq1jD$1Gyd9jZ~|` zXhq79I5HX0CX`0ci*+Vk*Xioccxh*s>qHzc9qH(Bx;-~lCu^dSwA1B!UZm5#PVuak zj;7p5`^Y&D;z`eSJU8yPrQLSNz7j6C%e~2z6Gx1J)M) zSa%lH)h$}Mc)8OSjie%+m-6c5q1|r6{QReprd0Avv3A#Z?_kO8ip1hh#|>=O$!2$V z%Jtkt+9T*@!gbt4Zcg#R!UX7QC=YvqQb%nh?KGU-~C^MOAi zS6UTP{E{=&!dj#-Db$JV;MB{Qm9Sza*6Wnv!0SIr*S8a;q!@XgEMKB-8v$_c~;28ksyD=^b7~WWH5JfdTnv_4VsG@4CnNSWLuY( z=iZv*6=rLeOsl{&>AKDn6XW@8!NS|JAI+#*rY>l&nWp=szGNHc?_8jvVVLA|1T8>+ zkZn4CpJ_Di0IkQ<@M>k7YO5aBJ%kVz-INOFFiZS4rKnVtySU#Os>@KW)f$g!I9pZr Pu%fS4=Z??+%anfsSI`_v delta 2276 zcmY+_drZ}39LMqR@t_!@9q@2Jig>^q2%(gTk_Wt0R^}x_2olgGEu~`Xk7{))V`(D| zkKhiqQMr}mAI*-yNf*>-{;uhqiv>`+GglbI$L%e4poc z_+-$xyVn=JkeSkFTw90`vD9z23!5i!<9cMGS%=T;QJhEp=gZ7Kqn?$D zGuf<;`s)~`{`VBKd@Q`&>$e)Ks5f99_F$G-)Lx{ph=w<@0RO}Q2DnkQB4iA!#Hm<= zjBV?%6q~UScOqljLDbxjVk*9kn)nCK5zL?-;+DzyR!*UohFVldJCHv+z>US&Yd9X? zLk;|)tACCf=p5>~VbqF!nPv}R2pez!wUA4=9mlZ>^?MIaVtjj;0$H^u-3R+{8TA)j z`}dea{Z~{+BbbZ6pxG?U$1<$NIoOHJ#rC7NVhDM}PU2D=MlEQ%@~;&XQ_usY$Rw=> zwH0ff+uY|nF`M=Q)Rr7Zt>i6C$B&V|?Mqb3FXCd%?^(h4HWLDq4Fv^$3vJxs!k%4w$qEemHMyt2CQ-3 zg%9v~9JTTw>Cgn`p(a+1bYUIXjDz?rj$%8;tF=J(f0V-AG}JBOO~6-iAD%@Wo^6~w z8AWZ$Ugv3CLp_t_Y{xdF$xb23vGi-ai9}Fa(&_5`&iApE@$C|YIBuZ#sjvg^9J5Q{V!BTHm&d$)Q>uUHbg-y zJL}A04$S+u z?Y}OzI+^<0k~Qy^>dJXIi_i*na@j58%o>Zf8;CG5ksx_CozRvw6CCv9j|^Ei5@I(J zw-WlPpFrrauGRSC2yH_v!C_DC5hO3YlG*}YZ63*AI=y0LM3ZaNc8y*6V+9=V$}><~ zqN|=LBGwbp4cux8U8{-PlO^w8Yk=}JB0>a-c49W+CyI$QqJ_|D*MZa7NFfS{v1^$t zT<^Sj>;s&lUuE7t<9sA9z3+*wX??!L*7O7ZL@2Pr7kerroEXVio*w&sNkQyfSs>OJ u4kof^q^2Y~O6I1;_O8rJd{@!rk1ebS#@;E-{%>Ngz;_X8K diff --git a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/vibes_auth/locale/th_TH/LC_MESSAGES/django.po index a74f4485..5484de42 100644 --- a/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/vibes_auth/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "สมดุล" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "คำสั่ง" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "คำสั่ง" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "ข้อมูลส่วนตัว" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "สิทธิ์การใช้งาน" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "วันที่สำคัญ" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "ข้อมูลเพิ่มเติม" @@ -70,7 +70,7 @@ msgstr "ตรวจสอบโทเค็น" msgid "Verify a token (refresh or access)." msgstr "ตรวจสอบโทเค็น (รีเฟรชหรือเข้าถึง)" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "โทเค็นนี้ใช้ได้" @@ -102,9 +102,9 @@ msgstr "จัดการการอัปโหลดอวาตาร์ส msgid "confirm a user's password reset" msgstr "ยืนยันการรีเซ็ตรหัสผ่านของผู้ใช้" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "รหัสผ่านไม่ตรงกัน" @@ -128,39 +128,39 @@ msgstr "ผู้ใช้ที่เข้ารหัส uuid ด้วย b6 msgid "password too weak" msgstr "รหัสผ่านอ่อนแอเกินไป" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} ไม่พบ: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "อีเมลไม่ถูกต้อง" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "รูปแบบแอตทริบิวต์ไม่ถูกต้อง: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "ลิงก์การเปิดใช้งานไม่ถูกต้อง!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "บัญชีได้รับการเปิดใช้งานแล้ว..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "เกิดข้อผิดพลาด: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" @@ -196,6 +196,74 @@ msgstr "ภาษาเป็นหนึ่งใน {LANGUAGES} ที่ม msgid "address set" msgstr "ที่อยู่" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "ปิดกระทู้ที่เลือก" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "เปิดกระทู้ที่เลือก" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "เปิด" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "ปิด" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "ผู้ใช้" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "พนักงาน" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "ระบบ" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "สำหรับกระทู้ที่ไม่ระบุชื่อ" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "หัวข้อสนทนา" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "หัวข้อสนทนา" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "กรุณาให้ข้อมูลผู้ใช้หรืออีเมลสำหรับกระทู้แบบไม่ระบุตัวตน" + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "ผู้รับมอบหมายต้องเป็นผู้ใช้ที่เป็นพนักงานเท่านั้น" + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "ข้อความแชท" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "ข้อความแชท" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "จำเป็นต้องมีอีเมลที่ถูกต้องสำหรับการแชทแบบไม่ระบุตัวตน" + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "ข้อความต้องมีความยาว 1..1028 ตัวอักษร" + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "เรากำลังค้นหาผู้ดำเนินการเพื่อตอบคุณอยู่ กรุณารอสักครู่!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -426,7 +494,7 @@ msgstr "ขอแสดงความนับถือ
ทีมงาน % msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | เปิดใช้งานบัญชี" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | ตั้งค่ารหัสผ่านใหม่" @@ -439,7 +507,7 @@ msgstr "" "รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง. หมายเลขต้องถูกป้อนในรูปแบบ: \"+999999999\"." " อนุญาตให้ใช้ได้ถึง 15 หลัก." -#: vibes_auth/views.py:29 +#: 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 " @@ -454,7 +522,7 @@ msgstr "" "มุมมองนี้สร้างขึ้นบนมุมมองโทเค็นพื้นฐานและรับประกันการจำกัดอัตราที่เหมาะสมเพื่อป้องกันการโจมตีแบบ" " brute force" -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -469,7 +537,7 @@ msgstr "" " " "หน้าจอนี้พึ่งพาตัวจัดลำดับที่เกี่ยวข้องเพื่อตรวจสอบความถูกต้องของข้อมูลการรีเฟรชโทเค็นและสร้างผลลัพธ์ที่เหมาะสม" -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -477,11 +545,11 @@ msgstr "" "แสดงมุมมองสำหรับการตรวจสอบโทเค็นเว็บ JSON (JWT) " "โดยใช้การแปลงลำดับและการตรวจสอบความถูกต้องตามตรรกะเฉพาะ" -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "โทเค็นไม่ถูกต้อง" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -493,10 +561,10 @@ msgstr "" "และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ GenericViewSet " "เพื่อการจัดการ API ที่มีความแข็งแกร่ง" -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "รหัสผ่านได้รับการรีเซ็ตเรียบร้อยแล้ว!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "คุณได้เปิดใช้งานบัญชีเรียบร้อยแล้ว..." diff --git a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.mo index 8b34ce4f76cb794095f62238dd35a7c1456e9438..654055660528a82a09d5ea8ad0a2a1a1dbe0e4cb 100644 GIT binary patch delta 3423 zcmZvcdyG_99mfwYSXfvVmMT(MdX}fGbjqX3tI%C21xm3i3tho>>D`&LJD0h0XM67q zb!f;YwzgSg#EMOfT33ycL@{AA24h30W~PnCM{B5m+MrgejcKSRHX57w`QEwPveA?I z-OoAa-gAEMx!_$qIreJD%x4Uvf-FNCEyg?xgPV9TuFWxKIs84Gr;S!)+CUqe3ztIe zuZ16kcfj||4P3z`ZRKrS$g;cmWL2G_Gbv9PJ&^RS2YMR*H*3(CQH9T*AM!6oQ7gG^+=r{Na( z1-KNx2)Wbz0ixUd1Ipu;MaJ+m?L2VGtb{T=18;@LAvT-SP>~pi3g#D~BJh=zb+{1y z=1nHtZOqNa^nyiD7afHdZ7NV9e+nuB&p;{uTDtx&l%fkz=W0+MUxjDjn{WUIcqvC3 zun1p)W4d@ZiIZo2kTjbIq4tO2U9g<){}3wVSD-Gc!wSgHsrxSp$@zQ6_IvsS1MMd+y(XiI7F8TpbUQ;%HXq*vN6v> zoHpNs3iAcu0{4KMT*mY_m?gJLMlpM)}`p7OU) zie87_;#rCd!WuekgoG%Ofbqk23Nx`Lq+5{C`*3=pMo#J*>HdoR%joF z3i&wfgco6!F8DS4DCZ^L`x^H9arx~^$h2F_-^FJ)i4e+;T?BDe#d zfveR2KW3s3y$TZ#;Vjl~Lsj!TDZ5E9PMQI@3RdA>_zkF#zXoOSE&LhizU}ZPcpsbt zk3iMLV7i}$J?J+DCi3V4{2cr_^x+Y-D_2)w1-=ATOnV8#Ja`Ps(BX6)z&lx2p%h<& zNxMQtv<|u2{2A_q9U0=^!=#VNHuyAD_5K19ee*|18JM{g!U5O~71}bK3(r7(KMqwp z--0xbxdaudm!XR8?@;YJYeVz=GN=fx-az~{*}{e*Z~#&iW*9yIzY2B1TTn$eb7Qm3 zI-#n5KYSbx!$J54RD=#}YW}4^1oyL!;R1LW(n#i4P#Pr6oKN31;ieoH6&0x-fbC zuadr~bjr`U#CnS+SM>bA4*wsW8FSc;MlNd1w}7tOy(MstZD*fWr7uK(z_ruzWrGH5>>7BGw`74mV0_mG> zW^es`W3piSQ8ZnTrx)Rkw>Pi8(P?|iRXyu&8!b_>Huf45fmh{J#_V&UUpv@2KC`_q z4VLNmmCSROGfQgMx`t+KNbQc3I0e|1SZ+tK#6`F~b?u0YT!Flw+qH7*=6?UQvsrh_ n8%1~IvaXOOvwkV6U$zQtwG>rOucwg;fvfsqSFN&gOWS_|g?TL+ delta 2246 zcmX}sX>5&I9LMqh?PBRdTe_$!Mb%iRRi&3sd#ltowi#+ETD4AS$iyUGaIIsn#8TRK zNE+J<@{BD(f-xCEA}I-85EWr2GqjWO!k9^XfA^lwN&nC1oOAm;XZt_T`R~qE2cIWJ z9WlyMB7+zkX|@|HJ8+?F?qs&oXSM|g(f+-&Su^eA81BK}V$D|3KP}#@l=c5}+f1deAoH&rWh-F?JE7@iuDUyRQ8RHPAEE zeJ@cf_9dBZ#0;#!M$|(7!ZjGdD)ij77|Zy!i3+=Fd)yC)v6%J=*WZFswEsXos14K5 z*WGLYrsEI{;6SWJ=3+-tM{ydt#U9{Te2H36ruJVe=ubsA3`QntMW~~g;au&0--Rjk zH=>T@0%|4KF%It`&$cJ1E&me>F^!vaG_z0>sYd0%`V{tG10A4a2cE_Gn421Y&_2|J zj-zJ&6KbMu&PcXF10^F}R)X58xu}5_qV8XZx^KH{*CT&+I*t9$rgDpxw&X2prtfek z{)Z&K?O?jv+B(#hU&dbe9Bat>fAJDlv6|uZr}Cpe!mJ!`(!Z4iIY56|7CAus5ssi; z8svcbQuzV-A8Wt@yoy7y74=$X_BWf1V~{TU5t*BvK~3RfU zYA5ESjy|}WidOzTDv35Yn~+IbGwQ|Gt7_FGg=d_WDH_eFR>KWayd zQQwCpScG+0g7>iy<4K%Uz5nG@7~2+OCho*Z*o2+16_xEDQArlfQD^|1s1K9d~-D9k_!d7~fi`%)u1)Uk_M=I@`_2nAU(wwx4kuw%{UMPJ(EM z?jUcPJ;jOm9<`IBhlO9`NvLF7hRU4=jK%91)C%rW(aK+;28tks)!zrTGC%T@Rbm(1 zi~7RZs%ZOi32mE- z5^pq7qXuOuF^z~Pv=iDD73O7mp_&=TZl$i?PPWcpMX!ivyg&_ClvFC(36eIHY)YiB z2)zLlh$)1&ROehqXcxaFDv5kT$2g8CC#DiQ=FUV1qAM{&<3|u2nN<;^hytR$R8Y}t zr&1jzl!S5ANrTYWQr(5RxT2$JFM4BC`Vcc!q0A<9th0#VH(UaQ%49-`r9w`Il1S%Q zLMY>x5PDN034Ie{h=qibOZlPX)jQ8e@c&ZmYI>toriTe#$)!Z|Q&rZgkSFG?h&kf( uR>Yl*^fD64e24ZY_Vd~j199H#%r`!-JZpcH*P31HJ9IE7-}@)0ApSEiG}9&k diff --git a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po index 67cecd84..a26e5a38 100644 --- a/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Denge" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Sipariş" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Siparişler" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Kişisel Bilgiler" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "İzinler" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Önemli tarihler" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Ek Bilgi" @@ -70,7 +70,7 @@ msgstr "Bir belirteci doğrulayın" msgid "Verify a token (refresh or access)." msgstr "Bir belirteci doğrulayın (yenileme veya erişim)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Belirteç geçerlidir" @@ -103,9 +103,9 @@ msgstr "Bir kullanıcı için avatar yükleme işlemini gerçekleştirin" msgid "confirm a user's password reset" msgstr "Bir kullanıcının parola sıfırlamasını onaylama" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Parolalar eşleşmiyor" @@ -129,39 +129,39 @@ msgstr "Yeni kullanıcıyı bize yönlendiren kullanıcının b64 kodlu uuid'si. msgid "password too weak" msgstr "Şifre çok zayıf" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} mevcut değil: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Hatalı biçimlendirilmiş e-posta" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Hatalı biçimlendirilmiş telefon numarası: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Geçersiz öznitelik biçimi: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Aktivasyon bağlantısı geçersiz!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Hesap zaten etkinleştirildi..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Bir şeyler ters gitti: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Jeton geçersiz!" @@ -198,6 +198,74 @@ msgstr "Dil, varsayılan {LANGUAGE_CODE} ile {LANGUAGES}'dan biridir" msgid "address set" msgstr "Adresler" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Seçili konuları kapatın" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Seçili konuları açın" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Açık" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Kapalı" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Kullanıcı" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Personel" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Sistem" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Anonim konular için" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Sohbet başlığı" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Sohbet konuları" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "Anonim konu için kullanıcı veya e-posta sağlayın." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Atanan kişi bir personel kullanıcısı olmalıdır." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Sohbet mesajı" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Sohbet mesajları" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Anonim sohbetler için geçerli e-posta gereklidir." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Mesaj 1..1028 karakter olmalıdır." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "Size cevap verecek operatörü arıyoruz, bekleyin!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -433,7 +501,7 @@ msgstr "Saygılarımla,
the %(project_name)s team" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Hesabı Etkinleştir" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Şifreyi Sıfırla" @@ -446,7 +514,7 @@ msgstr "" "Geçersiz telefon numarası biçimi. Numara şu formatta girilmelidir: " "\"+999999999\". En fazla 15 haneye izin verilir." -#: vibes_auth/views.py:29 +#: 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 " @@ -461,7 +529,7 @@ msgstr "" "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." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -476,7 +544,7 @@ msgstr "" "yenileme girdilerini doğrulamak ve uygun çıktıları üretmek için ilişkili " "serileştiriciye dayanır." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -484,11 +552,11 @@ msgstr "" "Belirli serileştirme ve doğrulama mantığını kullanarak JSON Web " "Belirteçlerini (JWT) doğrulamaya yönelik bir görünümü temsil eder." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Belirteç geçersiz" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -496,10 +564,10 @@ 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." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Şifre başarıyla sıfırlandı!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Hesabı zaten etkinleştirdiniz..." diff --git a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.mo index 59f3289050c32eb13dec316ec6ece89ac9889fd1..35d8b5da72c5408d19819108d4ad3e1abb376b91 100644 GIT binary patch delta 3708 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 A9RL6T diff --git a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po index a6d660f6..dba249c7 100644 --- a/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po +++ b/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "Cân bằng" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "Đặt hàng" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "Đơn hàng" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "Thông tin cá nhân" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "Quyền" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "Các ngày quan trọng" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "Thông tin bổ sung" @@ -70,7 +70,7 @@ msgstr "Xác minh token" msgid "Verify a token (refresh or access)." msgstr "Xác minh token (cập nhật hoặc truy cập)." -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "Token này hợp lệ" @@ -102,9 +102,9 @@ msgstr "Xử lý việc tải lên avatar cho người dùng" msgid "confirm a user's password reset" msgstr "Xác nhận việc đặt lại mật khẩu của người dùng" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "Mật khẩu không khớp." @@ -131,39 +131,39 @@ msgstr "" msgid "password too weak" msgstr "Mật khẩu quá yếu." -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} không tồn tại: {uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "Email không hợp lệ" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "Số điện thoại không hợp lệ: {phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "Định dạng thuộc tính không hợp lệ: {attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "Liên kết kích hoạt không hợp lệ!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "Tài khoản đã được kích hoạt..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "Có sự cố xảy ra: {e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token không hợp lệ!" @@ -200,6 +200,77 @@ msgstr "Ngôn ngữ là một trong những {LANGUAGES} với mặc định {LAN msgid "address set" msgstr "Địa chỉ" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "Đóng các chủ đề đã chọn" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "Mở các chủ đề đã chọn" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "Mở" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "Đóng" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "Người dùng" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "Nhân viên" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "Hệ thống" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "Đối với các chủ đề ẩn danh" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "Dòng trò chuyện" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "Các chuỗi trò chuyện" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "" +"Cung cấp tên người dùng hoặc địa chỉ email cho chuỗi thảo luận ẩn danh." + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "Người được giao nhiệm vụ phải là người dùng nhân viên." + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "Tin nhắn trò chuyện" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "Tin nhắn trò chuyện" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "Địa chỉ email hợp lệ là bắt buộc cho các cuộc trò chuyện ẩn danh." + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "Thông điệp phải có độ dài từ 1 đến 1028 ký tự." + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "" +"Chúng tôi đang tìm kiếm nhân viên tổng đài để trả lời cho bạn, xin vui lòng " +"chờ một lát!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -430,7 +501,7 @@ msgstr "Trân trọng,
Đội ngũ %(project_name)s" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME} | Kích hoạt tài khoản" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME} | Đặt lại mật khẩu" @@ -443,7 +514,7 @@ 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ố." -#: vibes_auth/views.py:29 +#: 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 " @@ -458,7 +529,7 @@ msgstr "" "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." -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -473,7 +544,7 @@ msgstr "" "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." -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " @@ -481,11 +552,11 @@ msgstr "" "Đại diện cho một giao diện dùng để xác minh JSON Web Tokens (JWT) bằng cách " "sử dụng logic serialization và xác thực cụ thể." -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "Token không hợp lệ" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -496,10 +567,10 @@ msgstr "" " 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ẽ." -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "Mật khẩu đã được đặt lại thành công!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "Bạn đã kích hoạt tài khoản..." diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo index f14e069e44f71672488c4ea32a727896023154b9..13b775da8ecec04ec154fd99e0330b464c4450dd 100644 GIT binary patch delta 3364 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 X`uXz7(e!&2O_BbbL{)lS;%v_UD^|!~ diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index 9785b891..2a371b11 100644 --- a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 3.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-13 18:49+0300\n" +"POT-Creation-Date: 2025-10-25 19:28+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -13,32 +13,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: vibes_auth/admin.py:36 vibes_auth/admin.py:37 +#: vibes_auth/admin.py:39 vibes_auth/admin.py:40 #: vibes_auth/graphene/object_types.py:46 msgid "balance" msgstr "平衡" -#: vibes_auth/admin.py:45 +#: vibes_auth/admin.py:48 msgid "order" msgstr "订购" -#: vibes_auth/admin.py:46 vibes_auth/graphene/object_types.py:44 +#: vibes_auth/admin.py:49 vibes_auth/graphene/object_types.py:44 msgid "orders" msgstr "订单" -#: vibes_auth/admin.py:56 +#: vibes_auth/admin.py:59 msgid "personal info" msgstr "个人信息" -#: vibes_auth/admin.py:60 vibes_auth/graphene/object_types.py:43 +#: vibes_auth/admin.py:63 vibes_auth/graphene/object_types.py:43 msgid "permissions" msgstr "权限" -#: vibes_auth/admin.py:73 +#: vibes_auth/admin.py:76 msgid "important dates" msgstr "重要日期" -#: vibes_auth/admin.py:74 +#: vibes_auth/admin.py:77 msgid "additional info" msgstr "其他信息" @@ -70,7 +70,7 @@ msgstr "验证令牌" msgid "Verify a token (refresh or access)." msgstr "验证令牌(刷新或访问)。" -#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:77 +#: vibes_auth/docs/drf/views.py:62 vibes_auth/views.py:78 msgid "the token is valid" msgstr "令牌有效" @@ -102,9 +102,9 @@ msgstr "处理用户的头像上传" msgid "confirm a user's password reset" msgstr "确认用户密码重置" -#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:311 +#: vibes_auth/docs/drf/viewsets.py:58 vibes_auth/graphene/mutations.py:320 #: vibes_auth/serializers.py:105 vibes_auth/serializers.py:109 -#: vibes_auth/viewsets.py:83 +#: vibes_auth/viewsets.py:84 msgid "passwords do not match" msgstr "密码不匹配" @@ -128,39 +128,39 @@ msgstr "将新用户推荐给我们的用户的 b64-encoded uuid。" msgid "password too weak" msgstr "密码太弱" -#: vibes_auth/graphene/mutations.py:107 +#: vibes_auth/graphene/mutations.py:110 #, python-brace-format msgid "{name} does not exist: {uuid}" msgstr "{name} 不存在:{uuid}!" -#: vibes_auth/graphene/mutations.py:117 +#: vibes_auth/graphene/mutations.py:120 msgid "malformed email" msgstr "畸形电子邮件" -#: vibes_auth/graphene/mutations.py:124 vibes_auth/serializers.py:115 +#: vibes_auth/graphene/mutations.py:127 vibes_auth/serializers.py:115 #, python-brace-format msgid "malformed phone number: {phone_number}" msgstr "畸形电话号码:{phone_number}!" -#: vibes_auth/graphene/mutations.py:146 +#: vibes_auth/graphene/mutations.py:149 #, python-brace-format msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}!" -#: vibes_auth/graphene/mutations.py:267 vibes_auth/viewsets.py:126 -#: vibes_auth/viewsets.py:145 +#: vibes_auth/graphene/mutations.py:273 vibes_auth/viewsets.py:127 +#: vibes_auth/viewsets.py:146 msgid "activation link is invalid!" msgstr "激活链接无效!" -#: vibes_auth/graphene/mutations.py:270 +#: vibes_auth/graphene/mutations.py:276 msgid "account already activated..." msgstr "帐户已激活..." -#: vibes_auth/graphene/mutations.py:277 vibes_auth/graphene/mutations.py:329 +#: vibes_auth/graphene/mutations.py:283 vibes_auth/graphene/mutations.py:339 msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: vibes_auth/graphene/mutations.py:318 vibes_auth/viewsets.py:94 +#: vibes_auth/graphene/mutations.py:327 vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "令牌无效!" @@ -195,6 +195,74 @@ msgstr "语言是{LANGUAGES}之一,默认为{LANGUAGE_CODE}。" msgid "address set" msgstr "地址" +#: vibes_auth/messaging/admin.py:36 +msgid "Close selected threads" +msgstr "关闭选定的线程" + +#: vibes_auth/messaging/admin.py:40 +msgid "Open selected threads" +msgstr "打开选定的线程" + +#: vibes_auth/messaging/models.py:24 +msgid "Open" +msgstr "开放" + +#: vibes_auth/messaging/models.py:25 +msgid "Closed" +msgstr "关闭" + +#: vibes_auth/messaging/models.py:29 +msgid "User" +msgstr "用户" + +#: vibes_auth/messaging/models.py:30 +msgid "Staff" +msgstr "工作人员" + +#: vibes_auth/messaging/models.py:31 +msgid "System" +msgstr "系统" + +#: vibes_auth/messaging/models.py:36 +msgid "For anonymous threads" +msgstr "匿名主题" + +#: vibes_auth/messaging/models.py:50 +msgid "Chat thread" +msgstr "聊天主题" + +#: vibes_auth/messaging/models.py:51 +msgid "Chat threads" +msgstr "聊天主题" + +#: vibes_auth/messaging/models.py:56 +msgid "Provide user or email for anonymous thread." +msgstr "为匿名主题提供用户或电子邮件。" + +#: vibes_auth/messaging/models.py:58 vibes_auth/messaging/services.py:136 +msgid "Assignee must be a staff user." +msgstr "受让人必须是工作人员用户。" + +#: vibes_auth/messaging/models.py:74 +msgid "Chat message" +msgstr "聊天信息" + +#: vibes_auth/messaging/models.py:75 +msgid "Chat messages" +msgstr "聊天信息" + +#: vibes_auth/messaging/services.py:48 +msgid "Valid email is required for anonymous chats." +msgstr "匿名聊天需要有效的电子邮件。" + +#: vibes_auth/messaging/services.py:56 +msgid "Message must be 1..1028 characters." +msgstr "信息必须为 1...1028 个字符。" + +#: vibes_auth/messaging/services.py:92 +msgid "We're searching for the operator to answer you already, hold by!" +msgstr "我们正在寻找接线员,请稍候!" + #: vibes_auth/models.py:30 msgid "" "Represents a User entity with customized fields and methods for extended " @@ -420,7 +488,7 @@ msgstr "致以最崇高的敬意,
%(project_name)s_团队" msgid "{config.PROJECT_NAME} | Activate Account" msgstr "{config.PROJECT_NAME}| 激活帐户" -#: vibes_auth/utils/emailing.py:63 +#: vibes_auth/utils/emailing.py:62 #, python-brace-format msgid "{config.PROJECT_NAME} | Reset Password" msgstr "{config.PROJECT_NAME}| 重置密码" @@ -431,7 +499,7 @@ msgid "" "\"+999999999\". up to 15 digits allowed." msgstr "电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" -#: vibes_auth/views.py:29 +#: 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 " @@ -442,7 +510,7 @@ msgstr "" "代表用于获取一对访问和刷新令牌以及用户数据的视图。该视图管理处理基于令牌的身份验证的流程,客户端可使用提供的凭据获取一对 JWT " "令牌(访问和刷新)。它建立在基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。" -#: vibes_auth/views.py:47 +#: vibes_auth/views.py:48 msgid "" "Handles refreshing of tokens for authentication purposes. This class is used" " to provide functionality for token refresh operations as part of an " @@ -452,17 +520,17 @@ msgid "" msgstr "" "处理刷新令牌以进行身份验证。该类用于为作为身份验证系统一部分的令牌刷新操作提供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化器来验证令牌刷新输入并产生适当的输出。" -#: vibes_auth/views.py:66 +#: vibes_auth/views.py:67 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "代表使用特定序列化和验证逻辑验证 JSON Web 标记 (JWT) 的视图。" -#: vibes_auth/views.py:79 +#: vibes_auth/views.py:80 msgid "the token is invalid" msgstr "令牌无效" -#: vibes_auth/viewsets.py:44 +#: 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." @@ -470,10 +538,10 @@ msgstr "" "用户视图集实施。\n" "该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" -#: vibes_auth/viewsets.py:98 +#: vibes_auth/viewsets.py:99 msgid "password reset successfully" msgstr "密码已重置成功!" -#: vibes_auth/viewsets.py:131 +#: vibes_auth/viewsets.py:132 msgid "account already activated!" msgstr "您已经激活了账户..." diff --git a/vibes_auth/messaging/__init__.py b/vibes_auth/messaging/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/vibes_auth/messaging/admin.py b/vibes_auth/messaging/admin.py new file mode 100644 index 00000000..df5fba65 --- /dev/null +++ b/vibes_auth/messaging/admin.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +from django.contrib import admin +from django.utils.translation import gettext_lazy as _ + +from vibes_auth.messaging.models import ChatMessage, ChatThread, ThreadStatus + + +@admin.register(ChatThread) +class ChatThreadAdmin(admin.ModelAdmin): + list_display = ( + "uuid", + "user", + "email", + "assigned_to", + "status", + "last_message_at", + "is_active", + "created", + "modified", + ) + list_filter = ( + "status", + "is_active", + ("assigned_to", admin.EmptyFieldListFilter), + ) + search_fields = ("uuid", "email", "user__email", "user__username") + autocomplete_fields = ("user", "assigned_to") + actions = ( + "close_threads", + "open_threads", + "delete_selected", + ) + readonly_fields = ("created", "modified") + + @admin.action(description=_("Close selected threads")) + def close_threads(self, request, queryset): # type: ignore[no-untyped-def] + queryset.update(status=ThreadStatus.CLOSED) + + @admin.action(description=_("Open selected threads")) + def open_threads(self, request, queryset): # type: ignore[no-untyped-def] + queryset.update(status=ThreadStatus.OPEN) + + +@admin.register(ChatMessage) +class ChatMessageAdmin(admin.ModelAdmin): + list_display = ("uuid", "thread", "sender_type", "sender_user", "sent_at") + list_filter = ("sender_type",) + search_fields = ("uuid", "thread__uuid", "sender_user__email") + autocomplete_fields = ("thread", "sender_user") + readonly_fields = ("created", "modified") diff --git a/vibes_auth/messaging/auth.py b/vibes_auth/messaging/auth.py new file mode 100644 index 00000000..e4f5d256 --- /dev/null +++ b/vibes_auth/messaging/auth.py @@ -0,0 +1,48 @@ +from __future__ import annotations + +from contextlib import suppress +from typing import Iterable, Optional + +from channels.middleware import BaseMiddleware +from django.contrib.auth.models import AnonymousUser +from django.utils.functional import LazyObject +from rest_framework_simplejwt.authentication import JWTAuthentication + + +class _LazyUser(LazyObject): + def _setup(self): + self._wrapped = AnonymousUser() + + +def _extract_jwt_from_subprotocols(subprotocols: Optional[Iterable[str]]) -> Optional[str]: + if not subprotocols: + return None + items = list(subprotocols) + if len(items) >= 2 and items[0].lower() == "bearer" and items[1]: + return items[1] + if len(items) == 1 and items[0]: + return items[0] + return None + + +class JWTAuthMiddleware(BaseMiddleware): + async def __call__(self, scope, receive, send): + scope["user"] = _LazyUser() + + token = _extract_jwt_from_subprotocols(scope.get("subprotocols")) + if token: + jwt_auth = JWTAuthentication() + with suppress(Exception): + + class _Req: + def __init__(self, token_str: str): + self.META = {"HTTP_AUTHORIZATION": f"Bearer {token_str}"} + + user, _ = jwt_auth.authenticate(_Req(token)) # type: ignore[arg-type] + scope["user"] = user + + return await super().__call__(scope, receive, send) + + +def JWTAuthMiddlewareStack(inner): + return JWTAuthMiddleware(inner) diff --git a/vibes_auth/messaging/consumers.py b/vibes_auth/messaging/consumers.py new file mode 100644 index 00000000..c16756a9 --- /dev/null +++ b/vibes_auth/messaging/consumers.py @@ -0,0 +1,50 @@ +from __future__ import annotations + +from typing import Any + +from channels.generic.websocket import AsyncJsonWebsocketConsumer + +MAX_MESSAGE_LENGTH = 1028 + + +class UserMessageConsumer(AsyncJsonWebsocketConsumer): + async def connect(self) -> None: # noqa: D401 + await self.accept() + + async def receive_json(self, content: dict[str, Any], **kwargs) -> None: + action = content.get("action") + if action == "ping": + await self.send_json({"type": "pong"}) + else: + text = content.get("text", "") + if isinstance(text, str) and len(text) <= MAX_MESSAGE_LENGTH: + await self.send_json({"echo": text}) + else: + await self.send_json({"error": "invalid_payload"}) + + +class StaffInboxConsumer(AsyncJsonWebsocketConsumer): + async def connect(self) -> None: + user = self.scope.get("user") + if not getattr(user, "is_staff", False): + await self.close(code=4403) + return + await self.accept() + + async def receive_json(self, content: dict[str, Any], **kwargs) -> None: + await self.send_json({"ok": True}) + + +class ThreadConsumer(AsyncJsonWebsocketConsumer): + thread_id: Any = None + + async def connect(self) -> None: + user = self.scope.get("user") + if not getattr(user, "is_staff", False): + await self.close(code=4403) + return + self.thread_id = self.scope["url_route"]["kwargs"].get("thread_id") + await self.accept() + + async def receive_json(self, content: dict[str, Any], **kwargs) -> None: + await self.send_json({"thread": getattr(self, "thread_id", None), "ok": True}) diff --git a/vibes_auth/messaging/models.py b/vibes_auth/messaging/models.py new file mode 100644 index 00000000..47ca92b6 --- /dev/null +++ b/vibes_auth/messaging/models.py @@ -0,0 +1,75 @@ +from __future__ import annotations + +from django.core.exceptions import ValidationError +from django.db.models import ( + CharField, + DateTimeField, + EmailField, + ForeignKey, + Index, + JSONField, + TextChoices, + TextField, + SET_NULL, + CASCADE, +) +from django.utils import timezone +from django.utils.translation import gettext_lazy as _ + +from core.abstract import NiceModel +from vibes_auth.models import User + + +class ThreadStatus(TextChoices): + OPEN = "open", _("Open") + CLOSED = "closed", _("Closed") + + +class SenderType(TextChoices): + USER = "user", _("User") + STAFF = "staff", _("Staff") + SYSTEM = "system", _("System") + + +class ChatThread(NiceModel): + user = ForeignKey(User, null=True, blank=True, on_delete=SET_NULL, related_name="chat_threads") + email = EmailField(blank=True, default="", help_text=_("For anonymous threads")) + assigned_to = ForeignKey(User, null=True, blank=True, on_delete=SET_NULL, related_name="assigned_chat_threads") + status = CharField(max_length=16, choices=ThreadStatus.choices, default=ThreadStatus.OPEN) + last_message_at = DateTimeField(default=timezone.now) + attributes = JSONField(default=dict, blank=True) + + class Meta: + indexes = [ + Index(fields=["status", "modified"], name="chatthread_status_mod_idx"), + Index(fields=["assigned_to", "status"], name="chatthread_assigned_status_idx"), + Index(fields=["user"], name="chatthread_user_idx"), + Index(fields=["email"], name="chatthread_email_idx"), + ] + ordering = ("-modified",) + verbose_name = _("Chat thread") + verbose_name_plural = _("Chat threads") + + def clean(self) -> None: + super().clean() + if not self.user and not self.email: + raise ValidationError({"email": _("Provide user or email for anonymous thread.")}) + if self.assigned_to and not self.assigned_to.is_staff: + raise ValidationError({"assigned_to": _("Assignee must be a staff user.")}) + + +class ChatMessage(NiceModel): + thread = ForeignKey(ChatThread, on_delete=CASCADE, related_name="messages") + sender_type = CharField(max_length=16, choices=SenderType.choices) + sender_user = ForeignKey(User, null=True, blank=True, on_delete=SET_NULL, related_name="chat_messages") + text = TextField() + sent_at = DateTimeField(default=timezone.now) + attributes = JSONField(default=dict, blank=True) + + class Meta: + indexes = [ + Index(fields=["thread", "sent_at"], name="chatmessage_thread_sent_idx"), + ] + ordering = ("sent_at", "uuid") + verbose_name = _("Chat message") + verbose_name_plural = _("Chat messages") diff --git a/vibes_auth/messaging/routing.py b/vibes_auth/messaging/routing.py new file mode 100644 index 00000000..86f0117e --- /dev/null +++ b/vibes_auth/messaging/routing.py @@ -0,0 +1,9 @@ +from django.urls import re_path + +from vibes_auth.messaging.consumers import StaffInboxConsumer, ThreadConsumer, UserMessageConsumer + +websocket_urlpatterns = [ + re_path(r"^ws/chat/message$", UserMessageConsumer.as_asgi()), + re_path(r"^ws/chat/staff/$", StaffInboxConsumer.as_asgi()), + re_path(r"^ws/chat/thread/(?P[0-9a-fA-F-]{36})/$", ThreadConsumer.as_asgi()), +] diff --git a/vibes_auth/messaging/services.py b/vibes_auth/messaging/services.py new file mode 100644 index 00000000..82cd970c --- /dev/null +++ b/vibes_auth/messaging/services.py @@ -0,0 +1,168 @@ +from __future__ import annotations + +from dataclasses import dataclass +from typing import Optional + +from asgiref.sync import async_to_sync +from channels.layers import get_channel_layer +from django.core.exceptions import PermissionDenied, ValidationError +from django.db import models +from django.db.models import Count +from django.utils import timezone +from django.utils.translation import gettext_lazy as _ + +from vibes_auth.messaging.models import ChatMessage, ChatThread, SenderType, ThreadStatus +from vibes_auth.models import User + +THREAD_GROUP_PREFIX = "thread:" +STAFF_INBOX_GROUP = "staff:inbox" + + +@dataclass +class MessageDTO: + id: str + thread: str + text: str + sender_type: str + sender_user: Optional[str] + sent_at: str + + +def _broadcast_thread_event(thread: ChatThread, event: dict) -> None: + layer = get_channel_layer() + async_to_sync(layer.group_send)(f"{THREAD_GROUP_PREFIX}{thread.uuid}", event) + + +def _broadcast_staff_inbox(event: dict) -> None: + layer = get_channel_layer() + async_to_sync(layer.group_send)(STAFF_INBOX_GROUP, event) + + +def get_or_create_user_thread(user: User) -> ChatThread: + thread, _ = ChatThread.objects.get_or_create(user=user, defaults={"email": user.email or ""}) + return thread + + +def create_anon_thread(email: str) -> ChatThread: + if not email or "@" not in email: + raise ValidationError({"email": _("Valid email is required for anonymous chats.")}) + thread = ChatThread.objects.create(email=email) + _broadcast_staff_inbox({"type": "staff.thread.created", "thread_id": str(thread.uuid)}) + return thread + + +def send_message(thread: ChatThread, *, sender_user: Optional[User], sender_type: SenderType, text: str) -> ChatMessage: + if not text or len(text) > 1028: + raise ValidationError({"text": _("Message must be 1..1028 characters.")}) + # Permission rules: non-staff may only write to their own thread or anon thread they initiated + if sender_user and not sender_user.is_staff: + if thread.user_id != sender_user.pk: + raise PermissionDenied + msg = ChatMessage.objects.create( + thread=thread, + sender_type=sender_type, + sender_user=sender_user if sender_user and sender_user.is_authenticated else None, + text=text, + sent_at=timezone.now(), + ) + thread.last_message_at = msg.sent_at + thread.save(update_fields=["last_message_at", "modified"]) + + _broadcast_thread_event( + thread, + { + "type": "thread.message", + "message": { + "id": str(msg.uuid), + "thread": str(thread.uuid), + "text": msg.text, + "sender_type": msg.sender_type, + "sender_user": str(msg.sender_user.uuid) if msg.sender_user_id else None, + "sent_at": msg.sent_at.isoformat(), + }, + }, + ) + if sender_type != SenderType.STAFF: + auto_reply(thread) + return msg + + +def auto_reply(thread: ChatThread) -> None: + # Localizable text, do not translate here + text = _("We're searching for the operator to answer you already, hold by!") + msg = ChatMessage.objects.create( + thread=thread, + sender_type=SenderType.SYSTEM, + sender_user=None, + text=text, + sent_at=timezone.now(), + ) + thread.last_message_at = msg.sent_at + thread.save(update_fields=["last_message_at", "modified"]) + _broadcast_thread_event( + thread, + { + "type": "thread.message", + "message": { + "id": str(msg.uuid), + "thread": str(thread.uuid), + "text": msg.text, + "sender_type": msg.sender_type, + "sender_user": None, + "sent_at": msg.sent_at.isoformat(), + }, + }, + ) + + +def claim_thread(thread: ChatThread, staff_user: User) -> ChatThread: + if not staff_user.is_staff: + raise PermissionDenied + if thread.assigned_to_id and not staff_user.is_superuser: + # already assigned, cannot reassign/unassign + raise PermissionDenied + thread.assigned_to = staff_user + thread.save(update_fields=["assigned_to", "modified"]) + _broadcast_staff_inbox( + {"type": "staff.thread.assigned", "thread_id": str(thread.uuid), "user": str(staff_user.uuid)} + ) + return thread + + +def reassign_thread(thread: ChatThread, superuser: User, new_staff: User) -> ChatThread: + if not superuser.is_superuser: + raise PermissionDenied + if not new_staff.is_staff: + raise ValidationError({"assigned_to": _("Assignee must be a staff user.")}) + thread.assigned_to = new_staff + thread.save(update_fields=["assigned_to", "modified"]) + _broadcast_staff_inbox( + {"type": "staff.thread.reassigned", "thread_id": str(thread.uuid), "user": str(new_staff.uuid)} + ) + return thread + + +def close_thread(thread: ChatThread, actor: User | None) -> ChatThread: + if actor and actor.is_staff: + pass # allowed + elif actor and not actor.is_staff: + # non-staff allowed to close own thread? Keep simple: allowed only for staff for now + raise PermissionDenied + thread.status = ThreadStatus.CLOSED + thread.save(update_fields=["status", "modified"]) + _broadcast_staff_inbox({"type": "staff.thread.closed", "thread_id": str(thread.uuid)}) + _broadcast_thread_event(thread, {"type": "thread.closed", "thread_id": str(thread.uuid)}) + return thread + + +def find_least_load_staff() -> Optional[User]: + qs = ( + User.objects.filter(is_staff=True, is_active=True) + .annotate( + open_threads=Count( + "assigned_chat_threads", filter=models.Q(assigned_chat_threads__status=ThreadStatus.OPEN) + ) + ) + .order_by("open_threads", "date_joined") + ) + return qs.first()