From 8375ef41dbc4be3a9748a11d513339210a4107f1 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 13 May 2025 23:02:16 +0300 Subject: [PATCH] Features: 1) Add `save` method to enforce single pending order per user in `Order` model; Fixes: 1) Adjust import order in `core/models.py` for better consistency; Extra: Refactor formatting for better readability in `core/models.py`; Update `pyproject.toml` version to 2.6.2; Update compiled translation file `cs_CZ/LC_MESSAGES/django.mo`. --- core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 45914 -> 46075 bytes core/locale/ar_AR/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 39910 -> 40039 bytes core/locale/cs_CZ/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/da_DK/LC_MESSAGES/django.mo | Bin 38688 -> 38809 bytes core/locale/da_DK/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/de_DE/LC_MESSAGES/django.mo | Bin 40863 -> 40990 bytes core/locale/de_DE/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/en_GB/LC_MESSAGES/django.mo | Bin 37280 -> 37397 bytes core/locale/en_GB/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/en_US/LC_MESSAGES/django.mo | Bin 37279 -> 37396 bytes core/locale/en_US/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/es_ES/LC_MESSAGES/django.mo | Bin 39999 -> 40124 bytes core/locale/es_ES/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 41019 -> 41153 bytes core/locale/fr_FR/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/hi_IN/LC_MESSAGES/django.po | 270 ++++++++--------- core/locale/it_IT/LC_MESSAGES/django.mo | Bin 40410 -> 40533 bytes core/locale/it_IT/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 41368 -> 41517 bytes core/locale/ja_JP/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/kk_KZ/LC_MESSAGES/django.po | 270 ++++++++--------- core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 39741 -> 39867 bytes core/locale/nl_NL/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 39886 -> 40027 bytes core/locale/pl_PL/LC_MESSAGES/django.po | 273 +++++++++--------- core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 39961 -> 40083 bytes core/locale/pt_BR/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 40428 -> 40575 bytes core/locale/ro_RO/LC_MESSAGES/django.po | 273 +++++++++--------- core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 51601 -> 51794 bytes core/locale/ru_RU/LC_MESSAGES/django.po | 272 ++++++++--------- core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 35716 -> 35819 bytes core/locale/zh_Hans/LC_MESSAGES/django.po | 272 ++++++++--------- core/models.py | 65 +++-- core/viewsets.py | 18 +- evibes/settings/base.py | 4 +- pyproject.toml | 2 +- vibes_auth/docs/__init__.py | 0 vibes_auth/docs/drf/__init__.py | 0 vibes_auth/docs/drf/views.py | 70 +++++ vibes_auth/docs/drf/viewsets.py | 66 +++++ vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo | Bin 7701 -> 9799 bytes vibes_auth/locale/ar_AR/LC_MESSAGES/django.po | 101 ++++++- vibes_auth/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 6443 -> 8123 bytes vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po | 102 ++++++- vibes_auth/locale/da_DK/LC_MESSAGES/django.mo | Bin 6315 -> 7987 bytes vibes_auth/locale/da_DK/LC_MESSAGES/django.po | 104 ++++++- vibes_auth/locale/de_DE/LC_MESSAGES/django.mo | Bin 6730 -> 8547 bytes vibes_auth/locale/de_DE/LC_MESSAGES/django.po | 113 ++++++-- vibes_auth/locale/en_GB/LC_MESSAGES/django.mo | Bin 6167 -> 7770 bytes vibes_auth/locale/en_GB/LC_MESSAGES/django.po | 94 +++++- vibes_auth/locale/en_US/LC_MESSAGES/django.mo | Bin 6166 -> 7759 bytes vibes_auth/locale/en_US/LC_MESSAGES/django.po | 99 ++++++- vibes_auth/locale/es_ES/LC_MESSAGES/django.mo | Bin 6544 -> 8321 bytes vibes_auth/locale/es_ES/LC_MESSAGES/django.po | 101 ++++++- vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo | Bin 6834 -> 8716 bytes vibes_auth/locale/fr_FR/LC_MESSAGES/django.po | 116 ++++++-- vibes_auth/locale/hi_IN/LC_MESSAGES/django.po | 92 +++++- vibes_auth/locale/it_IT/LC_MESSAGES/django.mo | Bin 6520 -> 8301 bytes vibes_auth/locale/it_IT/LC_MESSAGES/django.po | 102 ++++++- vibes_auth/locale/ja_JP/LC_MESSAGES/django.mo | Bin 7243 -> 9279 bytes vibes_auth/locale/ja_JP/LC_MESSAGES/django.po | 118 ++++++-- vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po | 92 +++++- vibes_auth/locale/nl_NL/LC_MESSAGES/django.mo | Bin 6438 -> 8197 bytes vibes_auth/locale/nl_NL/LC_MESSAGES/django.po | 109 +++++-- vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo | Bin 6476 -> 8244 bytes vibes_auth/locale/pl_PL/LC_MESSAGES/django.po | 99 ++++++- vibes_auth/locale/pt_BR/LC_MESSAGES/django.mo | Bin 6403 -> 8114 bytes vibes_auth/locale/pt_BR/LC_MESSAGES/django.po | 104 ++++++- vibes_auth/locale/ro_RO/LC_MESSAGES/django.mo | Bin 6616 -> 8405 bytes vibes_auth/locale/ro_RO/LC_MESSAGES/django.po | 105 ++++++- vibes_auth/locale/ru_RU/LC_MESSAGES/django.mo | Bin 8199 -> 10493 bytes vibes_auth/locale/ru_RU/LC_MESSAGES/django.po | 104 ++++++- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 6025 -> 7517 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 102 ++++++- vibes_auth/views.py | 9 +- vibes_auth/viewsets.py | 87 ++---- 78 files changed, 4301 insertions(+), 2771 deletions(-) create mode 100644 vibes_auth/docs/__init__.py create mode 100644 vibes_auth/docs/drf/__init__.py create mode 100644 vibes_auth/docs/drf/views.py create mode 100644 vibes_auth/docs/drf/viewsets.py diff --git a/core/locale/ar_AR/LC_MESSAGES/django.mo b/core/locale/ar_AR/LC_MESSAGES/django.mo index a9482dacd40c4412b4533d7c05bb22682ef385a0..a3dc711de065e509830c38c45719a2afda307fa6 100644 GIT binary patch delta 9130 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 ZSLu?{JQr6jchT_Gk|SY7>Ej;u{tpOIh8_R_ delta 8985 zcmZwNd3cUj8prV?B7_JD5+Vpe$R-l8B?yU#s@V6fh&8eARbKlNDw?LXZ$)eCD7AFx zv{ge(tHm&FwPloUGnQ(D&KT`{fA2Zwnm^{bdgpWQ^K55*5_8R??|rU(=i|8=?E8}8 z*iyonaI9S3m^dF}0>V^l%zJf=se&g^=Rb26V`cK7NNatpPM(6*un$(nNmvQ@>SsCgu`K5|pc?cl@=SBg)qjhL z>-32F5Exmwx(G8d1K|gX6XM0#0^?)iEfX%TC zwnz0a8_Qu|R0DF{`2y5)*SdUr9OJLK*hfVmoBQPM|_8<<`qh!=j zw?|z+0M(!|sOL^cHGG9TUx>csTTva|8PE7@=#NsNA^i}wdcSf$K)tA9BipbD)DR}2 zUX+3ij>$qs-AqHRrEM;M3w8ZXY>v0E1=dTj4H)8~pax7rHDCd%0WUk>zzXDNQ6qB& zHN>}3L-`Oj=RQoh8kCI5*beo)nOG55qDE*FYHIePcAMuY1fqMmot<+oAK`yCsif08lHFbQ{R|L0QB4M9!pT!tb4 znFM}lagIO@T`s2J4phtkhH8Kh-PHpdqISlI)%QV7K`ydW&1CF{+fXC% z2({=ETiNpiQB%4C_52rFG5(sn9aQMShfocAAGMt>U^rey_2?1mg(1v`8d?K&e-mVO zOa^Mv%|YE?h?=S`sORiOt%VPr=RFiO=bxh%#Vw4(x^3()pYEu|xCZs$A5lH{4fP=3 zG<$ylssjVZvABa?=jvOcH})kM_dosGJFG13r^+2AhNgM7@)VT{1(?CS3!mzqdg#o(G;^r+%>3Tb#B zS>UGWQ#PN9zT}6IudO+TT4Z-oBl8&5lZZ}y{jf1=ajilvzD-yP51{Tlihg(snKkoq zC&phD6`r<>Bm{M1ZPbI4u?%Kn9CpD%oP(pVVrM%-Gck>PE9$!I7>gCM?eBO`g+*hn#({eiye?zFx{~sZbUWkG^&BOus()%w;!I?s42=u^}GiL z<9w`+MW_b9fx7Q9@`*A3Moo<;g(a&Ow?$3G)2Myh1J$EE)P9|bx^5M!2kWpjp24Ab z0pl^Lr~REV3^T|Vp{DQ*2I583+PRLEwEum3*`cV4nwvVP)j1fo7`LK^{wiuj%JsH$ zmy9|;78l|!%*5C}cIc;|7TFq1#4Feo%lEa<%fM*u|49@y*Bepa_&;M6yym@tU4fc{ z2!6BlEx}7r4cXG)ezMPC5_yRMcAqDshPpTEg>z6Nb_g{UH?bM|vt_#Se$$o$qhShB z7k-cTFmw=q*`ohowilD!1$E=TVcw6OxrwRd4TjrAHUf43WK@q|LCy7LjKRt|wj*iI zk?3LJo0YEOOJ|7@cJV~vB+jQJr_5oTgJC1>9Ii!etK(Rak-3R#;C=RHMT{G5SAA>L zE*OZ_ag1~EXvSZQY8w^WHv2FFPrD1gM@>n|G4{Jq)0v1t)Mug|+!yu99)an&81?D$zmQdI!t?B+ zOF-p4oue^>{5g!p6WA8-psq{sjI#~Mz_L_yL-lMR>Vom^`~p{BfK{pAhFbl{Q1|_c zp;&Uf-DcG>o;(`$oPHRN<1i5Oot||Rf~nYrdhv184d+~b9V5tp!J1fkg1s)u*&cO$ zA5;T!u?;RnZNHPq1~PsV?P48*f#e&JDe;)S6xh1vXDp8$S#cGx4=NvpYWXw_!9rKR z+j$h#fK#Xke}P){KcJoyHJOhZHbY&v2-VQFSX=x54GP-t7qLD5fEv>HDfZt5EijmT zDMsUZEW%Tmg8ir3ef=`3=f}|xA7MlEnP%^g#RlYUTs|7pdB2%WK`nk4f5qRh3O<}} zhrav_=8Zfa)v%4I`(DF*jGAfhKZqU4?;+n9lQPRr*&5VtIO4pB`rzF`k5+NWvv!|0 z$7bZcQ4d~)^RU`%V|bTYj{z9`oZbJmurGN#RD(C58hF6vZ=;@n5r<+iHpkw4L^L%8 zbLdATg)LO*K_^j*CVZ~#$q=kZz8lrzPca@JqIy`LVbD-7z)H9rgK!gu;eKp^XHob0 z&NF5YCZX2K)p?v)Lg6+Qx^e1!yYH8v@?)q6e2mHHx4=Fq6`PRfI=7;FcG;Z|TxdtC z6-HD46vp8+=XT^$bHPJFE$_L=wrDiQkk3F3<#w!!e?UFp160rMqZU`i#ddME#A@W7 zQByPuGjJ;I#y{e498Pb0;s@9PJ>g63i*itNI05y7#i)jDMLqbC%RfQA_#3Q`0n2Q| zlTbZvhgxjoP$Rb-Bk-iFzlj=Iv)ntS9urJKJ#C4h*dF!ZK{y5%VHdoE-LQ2&-+5e( z8mR}U`|GT*J&!{*yd|nb*)Gq)aPpZhf605E`QJ@JFMikg8LG#3Q4jK8X@8s5z*zEl zjKKle9hahBbOqJ(pU^up&)eT6NtjA~57ZQ{cJ=RIAn!L^ufSqrR( zkTWDX9=qJMQemFkt%vod1Gx#=Y4b@m{U5eAm@1d?6y^ir$ z#e3`QKPZ~5r;>aNYLS)MU>%R6$S09|9rf?Vb zz+!BVS=;P$R-vZu9JWM{&nxzVR@jz`h1dvBx%@tAwKv;t&ksk9#7-QB<#~H=oQU)B z1FVQ0ciP?1AN9QH*bHAqoxh4w81;5md3wshb|j4 z$;YBb-~hJAxIftXDcFwu81~1Omb^oDE!}Mut&lZJU1(_lerXBH}9|o6x~1 zs{fpHHa|idF+pb>l-7>>my>^X`<3t2e zmHOdo&F@4sv69e{!HI!{uT8xl5?A#8f|*3JiSs%J;Zh=l@&=+2-vNoeo6&B(a;zh0< zMf~jQ7f^o3m0!eZL?Q7vVm0wDp<@Hr4JK9-GYQYvR0a|yb(Z5Ji}$x!lq>sjVJXVz zUH*ir)NduJkCln@fj<%*h&ALo{%!I8yur`SL@%Pbw}wwQ*Y$VhSFi&45L}7r#EKFg{w+^Mf08Q1 zljF#fg0t{{&Lva#4N-!+KjYttUX(B5EJDW%L?v&Dzogy0Y1qt_b!rN6g7FGm-0~e!X$i(y2r$Pq9gf1eDZ!1 zPDL#$_7ggK5}T>hu?T;{ABdMIwP<VIZiWa*4T=o1l)#gb(=|{1fpjp`$Z(Da0+xlW-~?BFa$y7Imaj z4#8Ypg%yYvlwZZ^sAD$PB0Otdg(}mCPlyrJJ&X4U9TDVrv7vvQKR@MXIx&;z$@#zHb2yp^qwM|cwSDtkov>1GR%=j@@@DCr;x7LIB~v}5 diff --git a/core/locale/ar_AR/LC_MESSAGES/django.po b/core/locale/ar_AR/LC_MESSAGES/django.po index bc5be970..73f78e0a 100644 --- a/core/locale/ar_AR/LC_MESSAGES/django.po +++ b/core/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -80,7 +80,7 @@ msgstr "الصورة" msgid "images" msgstr "الصور" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "المخزون" @@ -88,7 +88,7 @@ msgstr "المخزون" msgid "stocks" msgstr "الأسهم" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -96,35 +96,35 @@ msgstr "الأسهم" msgid "price" msgstr "السعر" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "تصنيف المنتج" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "معلومات أساسية" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "تواريخ مهمة" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "الترجمات" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "طلب المنتج" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "اطلب المنتجات" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "هل الأعمال" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "التكوين" @@ -483,55 +483,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "قائمة بجميع المنتجات (عرض بسيط)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(بالضبط) UUID المنتج" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(أيقونات) اسم المنتج" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(قائمة) أسماء الفئات، غير حساسة لحالة الأحرف" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(بالضبط) معرّف الفئة UUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(قائمة) أسماء العلامات، غير حساسة لحالة الأحرف" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) الحد الأدنى لسعر السهم" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) الحد الأقصى لسعر السهم" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(بالضبط) المنتجات النشطة فقط" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(أيكساكت) اسم العلامة التجارية" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(زط) الحد الأدنى لكمية المخزون" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(بالضبط) سبيكة المنتج" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(بالضبط) الرقمية مقابل المادية" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -539,33 +539,33 @@ msgstr "" "قائمة مفصولة بفواصل من الحقول للفرز حسب. البادئة بـ \"-\" للفرز التنازلي. \n" "**مسموح بها:** uuid، تصنيف، اسم، سبيكة، إنشاء، تعديل، سعر، عشوائي" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "استرداد منتج واحد (عرض تفصيلي)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "معرف المنتج UUID أو سبيكة المنتج" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "إنشاء منتج" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "إعادة كتابة منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "تحديث بعض حقول منتج موجود، مع الحفاظ على الحقول غير القابلة للتحرير" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "حذف منتج" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "لم يتم توفير مصطلح بحث." @@ -621,7 +621,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "يرجى تقديم إما Order_uuid أو order_uid_hr_hr_id - متنافيان!" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "جاء نوع خاطئ من طريقة order.buy(): {type(instance)!s}" @@ -807,7 +807,7 @@ msgstr "الرموز الترويجية" msgid "products on sale" msgstr "المنتجات المعروضة للبيع" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "العروض الترويجية" @@ -823,11 +823,11 @@ msgstr "البائع" msgid "product" msgstr "المنتج" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "المنتجات المفضلة" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "قوائم التمنيات" @@ -975,8 +975,8 @@ msgstr "سمة هذه القيمة" msgid "the specific product associated with this attribute's value" msgstr "المنتج المحدد المرتبط بقيمة هذه السمة" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "المنتج المرتبط" @@ -1072,7 +1072,7 @@ msgstr "ربط هذا المنتج اختياريًا بعلامة تجارية" msgid "tags that help describe or group this product" msgstr "العلامات التي تساعد في وصف أو تجميع هذا المنتج" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "علامات المنتج" @@ -1092,7 +1092,7 @@ msgstr "توفير اسم تعريفي واضح للمنتج" msgid "product name" msgstr "اسم المنتج" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "إضافة وصف تفصيلي للمنتج" @@ -1191,7 +1191,7 @@ msgstr "الحالة الحالية للطلب في دورة حياته" msgid "order status" msgstr "حالة الطلب" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "بنية JSON للإشعارات التي سيتم عرضها للمستخدمين، في واجهة مستخدم المشرف، يتم " @@ -1229,54 +1229,58 @@ msgstr "معرّف يمكن قراءته من قبل البشر" msgid "order" msgstr "الطلب" -#: core/models.py:536 +#: core/models.py:517 +msgid "a user must have only one pending order at a time" +msgstr "يجب أن يكون لدى المستخدم طلب واحد فقط معلق في كل مرة!" + +#: core/models.py:541 msgid "you cannot add products to an order that is not a pending one" msgstr "لا يمكنك إضافة منتجات إلى طلب غير معلق إلى طلب غير معلق" -#: core/models.py:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "لا يمكنك إضافة منتجات غير نشطة للطلب" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "لا يمكنك إضافة منتجات أكثر من المتوفرة في المخزون" -#: core/models.py:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} غير موجود: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 msgid "you cannot remove products from an order that is not a pending one" msgstr "لا يمكنك إزالة المنتجات من طلب غير معلق من طلب غير معلق" -#: core/models.py:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} غير موجود مع الاستعلام <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "الرمز الترويجي غير موجود" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "لا يمكنك الشراء في هذه اللحظة، يرجى المحاولة مرة أخرى بعد بضع دقائق." -#: core/models.py:629 +#: core/models.py:634 msgid "invalid force value" msgstr "قيمة القوة غير صالحة" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "لا يمكنك شراء طلبية فارغة!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "عدم كفاية الأموال لإكمال الطلب" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1284,188 +1288,188 @@ msgstr "" "لا يمكنك الشراء بدون تسجيل، يرجى تقديم المعلومات التالية: اسم العميل، البريد" " الإلكتروني للعميل، رقم هاتف العميل" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "طريقة الدفع غير صالحة" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "لا يمكنك إنشاء طلب مومنتال دون تقديم عنوان إرسال الفواتير" -#: core/models.py:779 +#: core/models.py:784 msgid "the price paid by the customer for this product at purchase time" msgstr "السعر الذي دفعه العميل لهذا المنتج وقت الشراء" -#: core/models.py:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "سعر الشراء وقت الطلب" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "تعليقات داخلية للمسؤولين حول هذا المنتج المطلوب" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "التعليقات الداخلية" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "إشعارات المستخدم" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "تمثيل JSON لسمات هذا العنصر" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "سمات المنتج المطلوبة" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "الإشارة إلى الطلب الأصلي الذي يحتوي على هذا المنتج" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "ترتيب الوالدين" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "المنتج المحدد المرتبط بخط الطلب هذا" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "كمية هذا المنتج المحدد في الطلب" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "كمية المنتج" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "الحالة الحالية لهذا المنتج بالترتيب" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "حالة خط الإنتاج" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "معرّف العلامة الداخلي لعلامة المنتج" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "اسم العلامة" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "اسم سهل الاستخدام لعلامة المنتج" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "اسم عرض العلامة" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "علامة المنتج" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "توفير نص بديل للصورة لإمكانية الوصول" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "النص البديل للصورة" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "تحميل ملف الصورة لهذا المنتج" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "صورة المنتج" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "يحدد الترتيب الذي يتم عرض الصور به" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "أولوية العرض" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "المنتج الذي تمثله هذه الصورة" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "صور المنتج" -#: core/models.py:951 +#: core/models.py:956 msgid "unique code used by a user to redeem a discount" msgstr "الرمز الفريد الذي يستخدمه المستخدم لاسترداد قيمة الخصم" -#: core/models.py:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "معرّف الرمز الترويجي" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "مبلغ الخصم الثابت المطبق في حالة عدم استخدام النسبة المئوية" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "مبلغ الخصم الثابت" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "النسبة المئوية للخصم المطبق في حالة عدم استخدام مبلغ ثابت" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "النسبة المئوية للخصم" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "الطابع الزمني عند انتهاء صلاحية الرمز الترويجي" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "وقت انتهاء الصلاحية" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "الطابع الزمني الذي يكون هذا الرمز الترويجي صالحاً منه" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "وقت بدء الصلاحية" -#: core/models.py:984 +#: core/models.py:989 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "الطابع الزمني عند استخدام الرمز الترويجي، فارغ إذا لم يتم استخدامه بعد" -#: core/models.py:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "الطابع الزمني للاستخدام" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "المستخدم المعين لهذا الرمز الترويجي إن أمكن" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "المستخدم المعين" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "الرمز الترويجي" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "الرموز الترويجية" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1473,140 +1477,140 @@ msgstr "" "يجب تحديد نوع واحد فقط من الخصم (المبلغ أو النسبة المئوية)، وليس كلا النوعين" " أو لا هذا ولا ذاك." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "تم استخدام الرمز الترويجي بالفعل" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "نوع الخصم غير صالح للرمز الترويجي {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "النسبة المئوية للخصم على المنتجات المختارة" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "نسبة الخصم" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "تقديم اسم فريد لهذا العرض الترويجي" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "اسم الترقية" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "وصف الترقية" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "حدد المنتجات المشمولة في هذا العرض الترويجي" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "المنتجات المشمولة" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "الترقية" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "البائع الذي يورد هذا المنتج المخزون" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "البائع المرتبط" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "السعر النهائي للعميل بعد هوامش الربح" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "سعر البيع" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "المنتج المرتبط بإدخال المخزون هذا" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "السعر المدفوع للبائع مقابل هذا المنتج" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "سعر الشراء من البائع" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "الكمية المتوفرة من المنتج في المخزون" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "الكمية في المخزون" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU المعين من قبل البائع لتحديد المنتج" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "وحدة تخزين البائع" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "الملف الرقمي المرتبط بهذا المخزون إن أمكن" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "ملف رقمي" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "إدخالات المخزون" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "المنتجات التي حددها المستخدم على أنها مطلوبة" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "المستخدم الذي يمتلك قائمة الرغبات هذه" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "مالك قائمة الرغبات" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "قائمة الرغبات" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "تنزيل" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "التنزيلات" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "لا يمكنك تنزيل أصل رقمي لطلب غير مكتمل" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "فيلم وثائقي" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "الأفلام الوثائقية" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "لم يتم حلها" diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.mo b/core/locale/cs_CZ/LC_MESSAGES/django.mo index 93cc5940e6afa19b1903524fc4fb0c9ea17a460e..eba8d72ce5510b749983043f2c59e5a83b6d138f 100644 GIT binary patch delta 9113 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%0A9FaiV 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 K-(g5h?*9SbP7^l( diff --git a/core/locale/cs_CZ/LC_MESSAGES/django.po b/core/locale/cs_CZ/LC_MESSAGES/django.po index 4344815e..1d0b0006 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: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -82,7 +82,7 @@ msgstr "Obrázek" msgid "images" msgstr "Obrázky" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stock" @@ -90,7 +90,7 @@ msgstr "Stock" msgid "stocks" msgstr "Zásoby" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -98,35 +98,35 @@ msgstr "Zásoby" msgid "price" msgstr "Cena" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Hodnocení produktu" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Základní informace" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Důležitá data" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Překlady" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Objednat produkt" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Objednat produkty" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Je podnikání" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Konfigurace" @@ -503,55 +503,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "Seznam všech produktů (jednoduché zobrazení)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(přesně) UUID produktu" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Název produktu" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(seznam) Názvy kategorií, nerozlišuje velká a malá písmena" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(přesně) Kategorie UUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(seznam) Názvy značek, nerozlišuje velká a malá písmena" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Minimální cena akcií" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Maximální cena akcií" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(přesně) Pouze aktivní produkty" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Obchodní značka" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Minimální skladové množství" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(přesně) Product slug" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(přesně) Digitální vs. fyzické" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -559,36 +559,36 @@ msgstr "" "Seznam polí oddělených čárkou, podle kterých se má třídit. Pro sestupné řazení použijte předponu `-`. \n" "**Povolené:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Vyhledání jednoho produktu (podrobné zobrazení)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "Identifikátor UUID produktu nebo Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Vytvoření produktu" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Přepsání existujícího produktu se zachováním polí, která nelze editovat" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Aktualizace některých polí existujícího produktu se zachováním polí, která " "nelze upravovat." -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Odstranění produktu" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Nebyl zadán žádný vyhledávací termín." @@ -643,7 +643,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Z metody order.buy() pochází nesprávný typ: {type(instance)!s}" @@ -832,7 +832,7 @@ msgstr "Propagační kódy" msgid "products on sale" msgstr "Produkty v prodeji" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Propagační akce" @@ -848,11 +848,11 @@ msgstr "Prodejce" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Produkty uvedené na seznamu přání" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Seznamy přání" @@ -999,8 +999,8 @@ msgstr "Atribut této hodnoty" msgid "the specific product associated with this attribute's value" msgstr "Konkrétní produkt spojený s hodnotou tohoto atributu" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Související produkt" @@ -1096,7 +1096,7 @@ msgstr "Volitelně přiřadit tento produkt ke značce" msgid "tags that help describe or group this product" msgstr "Značky, které pomáhají popsat nebo seskupit tento produkt" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Štítky produktu" @@ -1116,7 +1116,7 @@ msgstr "Uveďte jasný identifikační název výrobku" msgid "product name" msgstr "Název produktu" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Přidejte podrobný popis produktu" @@ -1217,7 +1217,7 @@ msgstr "Aktuální stav zakázky v jejím životním cyklu" msgid "order status" msgstr "Stav objednávky" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "JSON struktura oznámení pro zobrazení uživatelům, v uživatelském rozhraní " @@ -1255,56 +1255,60 @@ msgstr "lidsky čitelné ID" msgid "order" msgstr "Objednávka" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Do objednávky nelze přidat neaktivní produkty" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} neexistuje: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} neexistuje s dotazem <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Promo kód neexistuje" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Neplatná hodnota síly" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Nelze zakoupit prázdnou objednávku!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Nedostatek finančních prostředků na dokončení objednávky" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1312,187 +1316,187 @@ 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:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Neplatný způsob platby" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "nelze vytvořit momentální objednávku bez uvedení fakturační adresy." -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Nákupní cena v době objednávky" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "Interní komentáře pro administrátory k tomuto objednanému produktu" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Interní připomínky" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Oznámení uživatele" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "JSON reprezentace atributů této položky" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Objednané atributy produktu" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Odkaz na nadřazenou objednávku, která obsahuje tento produkt" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Objednávka rodičů" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Konkrétní produkt spojený s touto objednávkou" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Množství tohoto konkrétního produktu v objednávce" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Množství produktu" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Aktuální stav tohoto produktu v objednávce" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Stav produktové řady" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Interní identifikátor značky produktu" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Název štítku" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Uživatelsky přívětivý název pro značku produktu" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Zobrazení názvu štítku" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Štítek produktu" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "Poskytněte alternativní text k obrázku kvůli přístupnosti." -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Text alt obrázku" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Nahrát soubor s obrázkem tohoto produktu" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Obrázek produktu" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Určuje pořadí, v jakém se obrázky zobrazují." -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Priorita zobrazení" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Výrobek, který tento obrázek představuje" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Obrázky produktů" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Identifikátor propagačního kódu" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "Pevná výše slevy, pokud není použito procento" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Pevná výše slevy" -#: core/models.py:966 +#: core/models.py:971 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:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Procentuální sleva" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Časové razítko ukončení platnosti promokódu" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Doba ukončení platnosti" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Časové razítko, od kterého je tento promokód platný" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Čas zahájení platnosti" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Časové razítko použití" -#: core/models.py:990 +#: core/models.py:995 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:991 +#: core/models.py:996 msgid "assigned user" msgstr "Přiřazený uživatel" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Propagační kód" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Propagační kódy" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1500,140 +1504,140 @@ 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:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Promo kód byl již použit" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Neplatný typ slevy pro promocode {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Procentuální sleva na vybrané produkty" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Procento slevy" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Uveďte jedinečný název této propagační akce" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Název akce" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Popis propagace" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Vyberte, které produkty jsou zahrnuty do této akce" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Zahrnuté produkty" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Propagace" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Prodejce dodávající tento výrobek na sklad" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Přidružený prodejce" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Konečná cena pro zákazníka po přirážkách" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Prodejní cena" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Produkt spojený s touto skladovou položkou" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "Cena zaplacená prodejci za tento výrobek" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Kupní cena prodejce" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Dostupné množství produktu na skladě" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Množství na skladě" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU přidělený prodejcem pro identifikaci výrobku" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU prodejce" -#: core/models.py:1118 +#: core/models.py:1123 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:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Digitální soubor" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Zápisy do zásob" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Výrobky, které uživatel označil jako požadované" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Uživatel, který vlastní tento seznam přání" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Majitel seznamu přání" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Seznam přání" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Stáhnout" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Ke stažení na" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "Digitální aktivum pro nedokončenou objednávku nelze stáhnout." -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Dokumentární film" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Dokumentární filmy" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Nevyřešené" diff --git a/core/locale/da_DK/LC_MESSAGES/django.mo b/core/locale/da_DK/LC_MESSAGES/django.mo index 6a155182bf42f2af55c1283d30b3ebd2875ceda3..cdb2201bcb29fa6d32ad5c127d2fac23259f0097 100644 GIT binary patch delta 9105 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -81,7 +81,7 @@ msgstr "Billede" msgid "images" msgstr "Billeder" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Lager" @@ -89,7 +89,7 @@ msgstr "Lager" msgid "stocks" msgstr "Aktier" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -97,35 +97,35 @@ msgstr "Aktier" msgid "price" msgstr "Pris" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Produktvurdering" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Grundlæggende information" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Vigtige datoer" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Oversættelser" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Bestil produkt" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Bestil produkter" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Er forretning" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Konfig" @@ -511,55 +511,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "Liste over alle produkter (enkel visning)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(præcis) Produkt-UUID" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Produktnavn" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(liste) Kategorinavne, skelner ikke mellem store og små bogstaver" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(præcis) UUID for kategori" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(liste) Tag-navne, skelner ikke mellem store og små bogstaver" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Minimum aktiekurs" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Maksimal aktiekurs" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(præcis) Kun aktive produkter" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Mærkenavn" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Minimum lagermængde" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(nøjagtig) Produktsug" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(præcis) Digital vs. fysisk" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -567,35 +567,35 @@ msgstr "" "Kommasepareret liste over felter, der skal sorteres efter. Præfiks med `-` for faldende. \n" "**Tilladt:** uuid, vurdering, navn, slug, oprettet, ændret, pris, tilfældig" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Hent et enkelt produkt (detaljeret visning)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "Produkt UUID eller Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Opret et produkt" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Omskriv et eksisterende produkt og bevar ikke-redigerbare felter" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Opdater nogle felter i et eksisterende produkt og bevar ikke-redigerbare " "felter" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Slet et produkt" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Der er ikke angivet noget søgeord." @@ -650,7 +650,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Forkert type kom fra metoden order.buy(): {type(instance)!s}" @@ -843,7 +843,7 @@ msgstr "Promokoder" msgid "products on sale" msgstr "Produkter til salg" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Kampagner" @@ -859,11 +859,11 @@ msgstr "Leverandør" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Produkter på ønskelisten" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Ønskelister" @@ -1010,8 +1010,8 @@ msgstr "Attribut for denne værdi" msgid "the specific product associated with this attribute's value" msgstr "Det specifikke produkt, der er knyttet til denne attributs værdi" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Tilknyttet produkt" @@ -1107,7 +1107,7 @@ msgstr "Tilknyt eventuelt dette produkt til et brand" msgid "tags that help describe or group this product" msgstr "Tags, der hjælper med at beskrive eller gruppere dette produkt" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Produktmærker" @@ -1127,7 +1127,7 @@ msgstr "Giv produktet et klart identificerende navn" msgid "product name" msgstr "Produktets navn" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Tilføj en detaljeret beskrivelse af produktet" @@ -1228,7 +1228,7 @@ msgstr "Ordrens aktuelle status i dens livscyklus" msgid "order status" msgstr "Bestillingsstatus" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "JSON-struktur af meddelelser, der skal vises til brugerne, i admin UI bruges" @@ -1266,56 +1266,60 @@ msgstr "menneskeligt læsbart ID" msgid "order" msgstr "Bestil" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Du kan ikke tilføje inaktive produkter til en ordre" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} findes ikke: {product_uuid}." -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} findes ikke med forespørgsel <{query}>." -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Promokode findes ikke" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Ugyldig kraftværdi" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Du kan ikke købe en tom ordre!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Utilstrækkelige midler til at gennemføre ordren" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1323,189 +1327,189 @@ msgstr "" "du kan ikke købe uden registrering, angiv venligst følgende oplysninger: " "kundens navn, kundens e-mail, kundens telefonnummer" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Ugyldig betalingsmetode" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "Du kan ikke oprette en momental-ordre uden at angive en faktureringsadresse." -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Købspris på bestillingstidspunktet" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "Interne kommentarer til administratorer om dette bestilte produkt" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Interne kommentarer" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Notifikationer til brugere" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "JSON-repræsentation af dette elements attributter" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Bestilte produktattributter" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Henvisning til den overordnede ordre, der indeholder dette produkt" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Forældreordre" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Det specifikke produkt, der er knyttet til denne ordrelinje" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Mængde af dette specifikke produkt i ordren" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Produktmængde" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Aktuel status for dette produkt i bestillingen" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Status for produktlinje" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Intern tag-identifikator for produkttagget" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Tag-navn" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Brugervenligt navn til produktmærket" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Navn på tag-visning" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Produktmærke" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "Giv alternativ tekst til billedet af hensyn til tilgængeligheden" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Billedets alt-tekst" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Upload billedfilen til dette produkt" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Produktbillede" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Bestemmer den rækkefølge, billederne vises i" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Skærm-prioritet" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Det produkt, som dette billede repræsenterer" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Produktbilleder" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Identifikator for kampagnekode" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "Fast rabatbeløb anvendes, hvis procent ikke bruges" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Fast rabatbeløb" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentvis rabat, hvis det faste beløb ikke bruges" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Procentvis rabat" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Tidsstempel, når promokoden udløber" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Slut gyldighedstid" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Tidsstempel, hvorfra denne promokode er gyldig" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Start gyldighedstid" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Tidsstempel for brug" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Bruger tildelt denne promokode, hvis relevant" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Tildelt bruger" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Kampagnekode" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Kampagnekoder" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1513,140 +1517,140 @@ msgstr "" "Der skal kun defineres én type rabat (beløb eller procent), men ikke begge " "eller ingen af dem." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Promokoden er allerede blevet brugt" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ugyldig rabattype for promokode {self.uuid}." -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Procentvis rabat for de valgte produkter" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Rabatprocent" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Giv et unikt navn til denne kampagne" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Navn på kampagne" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Beskrivelse af kampagnen" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Vælg, hvilke produkter der er inkluderet i denne kampagne" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Inkluderede produkter" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Forfremmelse" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Den leverandør, der leverer dette produkt, lagerfører" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Tilknyttet leverandør" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Endelig pris til kunden efter tillæg" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Salgspris" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Det produkt, der er knyttet til denne lagerpost" -#: core/models.py:1101 +#: core/models.py:1106 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:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Leverandørens købspris" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Tilgængelig mængde af produktet på lager" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Antal på lager" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "Leverandørtildelt SKU til identifikation af produktet" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "Leverandørens SKU" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Digital fil knyttet til dette lager, hvis relevant" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Digital fil" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Lagerposteringer" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Produkter, som brugeren har markeret som ønskede" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Bruger, der ejer denne ønskeliste" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Ønskelistens ejer" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Ønskeliste" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Download" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Downloads" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "Du kan ikke downloade et digitalt aktiv for en ikke-færdiggjort ordre" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Dokumentarfilm" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Uafklaret" diff --git a/core/locale/de_DE/LC_MESSAGES/django.mo b/core/locale/de_DE/LC_MESSAGES/django.mo index 9725bff365e772f5500b4c7b2f7bb0332b027fab..34d16d841068d56537e7b58ed9d2782a41347b9e 100644 GIT binary patch delta 9111 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 diff --git a/core/locale/de_DE/LC_MESSAGES/django.po b/core/locale/de_DE/LC_MESSAGES/django.po index aea5bcef..0045549d 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: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Bild" msgid "images" msgstr "Bilder" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Lagerbestand" @@ -91,7 +91,7 @@ msgstr "Lagerbestand" msgid "stocks" msgstr "Bestände" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Bestände" msgid "price" msgstr "Preis" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Produktbewertung" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Grundlegende Informationen" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Wichtige Termine" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Übersetzungen" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Produkt bestellen" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Produkte bestellen" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Ist Business" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Konfigurieren Sie" @@ -522,57 +522,57 @@ msgstr "" msgid "list all products (simple view)" msgstr "Alle Produkte auflisten (einfache Ansicht)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(genaue) Produkt-UUID" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Produktname" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "" "(Liste) Kategorienamen, Groß- und Kleinschreibung wird nicht berücksichtigt" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(genau) Kategorie UUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "" "(Liste) Tag-Namen, Groß- und Kleinschreibung wird nicht berücksichtigt" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Mindestaktienkurs" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Maximaler Aktienkurs" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(genau) Nur aktive Produkte" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Markenname" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Mindestlagermenge" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(genau) Produktausschnitt" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(genau) Digital vs. physisch" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -580,37 +580,37 @@ msgstr "" "Durch Kommata getrennte Liste der Felder, nach denen sortiert werden soll. Präfix mit \"-\" für absteigend. \n" "**Erlaubt:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Ein einzelnes Produkt abrufen (Detailansicht)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "Produkt UUID oder Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Ein Produkt erstellen" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Umschreiben eines bestehenden Produkts unter Beibehaltung nicht editierbarer" " Felder" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Einige Felder eines bestehenden Produkts aktualisieren, nicht editierbare " "Felder beibehalten" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Ein Produkt löschen" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Kein Suchbegriff angegeben." @@ -667,7 +667,7 @@ msgstr "" "sich gegenseitig aus!" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Von der Methode order.buy() kam der falsche Typ: {type(instance)!s}" @@ -858,7 +858,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Zum Verkauf stehende Produkte" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Werbeaktionen" @@ -874,11 +874,11 @@ msgstr "Anbieter" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Auf dem Wunschzettel stehende Produkte" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Wunschzettel" @@ -1026,8 +1026,8 @@ msgid "the specific product associated with this attribute's value" msgstr "" "Das spezifische Produkt, das mit dem Wert dieses Attributs verbunden ist" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Zugehöriges Produkt" @@ -1126,7 +1126,7 @@ msgstr "Optional können Sie dieses Produkt mit einer Marke verknüpfen" msgid "tags that help describe or group this product" msgstr "Tags, die helfen, dieses Produkt zu beschreiben oder zu gruppieren" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Produkt-Tags" @@ -1147,7 +1147,7 @@ msgstr "" msgid "product name" msgstr "Name des Produkts" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Fügen Sie eine detaillierte Beschreibung des Produkts hinzu" @@ -1250,7 +1250,7 @@ msgstr "Aktueller Status des Auftrags in seinem Lebenszyklus" msgid "order status" msgstr "Status der Bestellung" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "JSON-Struktur der Benachrichtigungen, die den Benutzern angezeigt werden " @@ -1288,60 +1288,64 @@ msgstr "menschenlesbare ID" msgid "order" msgstr "Bestellung" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Sie können keine inaktiven Produkte zur Bestellung hinzufügen" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} existiert nicht: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} existiert nicht mit Abfrage <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Promocode existiert nicht" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Ungültiger Force-Wert" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Sie können keine leere Bestellung kaufen!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Unzureichende Mittel für die Ausführung des Auftrags" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1349,198 +1353,198 @@ msgstr "" "Sie können nicht ohne Registrierung kaufen, bitte geben Sie die folgenden " "Informationen an: Kundenname, Kunden-E-Mail, Kunden-Telefonnummer" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Ungültige Zahlungsmethode" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "Sie können keine kurzfristige Bestellung ohne Angabe einer Rechnungsadresse " "aufgeben." -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Einkaufspreis zum Zeitpunkt der Bestellung" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "Interne Kommentare für Administratoren zu diesem bestellten Produkt" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Interne Kommentare" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Benutzerbenachrichtigungen" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "JSON-Darstellung der Attribute dieses Artikels" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Bestellte Produktattribute" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Verweis auf den übergeordneten Auftrag, der dieses Produkt enthält" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Übergeordneter Auftrag" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Das spezifische Produkt, das mit dieser Auftragszeile verbunden ist" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Menge dieses spezifischen Produkts in der Bestellung" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Produktmenge" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Aktueller Status dieses Produkts im Auftrag" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Status der Produktlinie" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Interner Tag-Identifikator für das Produkt-Tag" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Tag name" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Benutzerfreundlicher Name für den Produktanhänger" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Tag-Anzeigename" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Produkt-Tag" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" "Geben Sie einen alternativen Text für das Bild an, um die Barrierefreiheit " "zu gewährleisten." -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Bild-Alt-Text" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Laden Sie die Bilddatei für dieses Produkt hoch" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Produktbild" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Legt die Reihenfolge fest, in der die Bilder angezeigt werden" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Priorität anzeigen" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Das Produkt, das dieses Bild darstellt" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Produktbilder" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Kennung des Promo-Codes" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "" "Fester Rabattbetrag, der angewandt wird, wenn kein Prozentsatz verwendet " "wird" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Fester Rabattbetrag" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "Prozentualer Rabatt, wenn der Festbetrag nicht verwendet wird" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Prozentualer Rabatt" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Zeitstempel, wann der Promocode abläuft" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Ende der Gültigkeitsdauer" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Zeitstempel, ab dem dieser Promocode gültig ist" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Beginn der Gültigkeitsdauer" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Zeitstempel der Verwendung" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Diesem Promocode zugewiesener Benutzer, falls zutreffend" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Zugewiesener Benutzer" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Promo-Code" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Promo-Codes" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1548,143 +1552,143 @@ msgstr "" "Es sollte nur eine Art von Rabatt definiert werden (Betrag oder " "Prozentsatz), aber nicht beides oder keines von beiden." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Promocode wurde bereits verwendet" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ungültiger Rabatttyp für Promocode {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Prozentualer Rabatt für die ausgewählten Produkte" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Prozentsatz der Ermäßigung" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Geben Sie einen eindeutigen Namen für diese Aktion an" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Name der Aktion" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Wählen Sie aus, welche Produkte in dieser Aktion enthalten sind" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Enthaltene Produkte" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Förderung" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Der Verkäufer, der dieses Produkt liefert, hat folgende Bestände" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Zugehöriger Anbieter" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Endpreis für den Kunden nach Aufschlägen" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Verkaufspreis" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Das mit diesem Bestandseintrag verbundene Produkt" -#: core/models.py:1101 +#: core/models.py:1106 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:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Einkaufspreis des Verkäufers" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Verfügbare Menge des Produkts auf Lager" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Vorrätige Menge" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "Vom Hersteller zugewiesene SKU zur Identifizierung des Produkts" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU des Verkäufers" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "" "Digitale Datei, die mit diesem Bestand verbunden ist, falls zutreffend" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Digitale Datei" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Bestandseinträge" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Produkte, die der Benutzer als gewünscht markiert hat" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Benutzer, dem diese Wunschliste gehört" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Besitzer der Wishlist" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Wunschzettel" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Herunterladen" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Herunterladen" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Sie können kein digitales Asset für eine nicht abgeschlossene Bestellung " "herunterladen" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Dokumentarfilm" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Dokumentarfilme" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Ungelöst" diff --git a/core/locale/en_GB/LC_MESSAGES/django.mo b/core/locale/en_GB/LC_MESSAGES/django.mo index 2015c242b0086a9388d986bf41c2c661705f3971..65f1fde1b4d20aed8c793c8dd1b02d17a354d6a3 100644 GIT binary patch delta 9115 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 DzT*bu diff --git a/core/locale/en_GB/LC_MESSAGES/django.po b/core/locale/en_GB/LC_MESSAGES/django.po index ec03e01f..d8ec6385 100644 --- a/core/locale/en_GB/LC_MESSAGES/django.po +++ b/core/locale/en_GB/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -81,7 +81,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stock" @@ -89,7 +89,7 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -97,35 +97,35 @@ msgstr "Stocks" msgid "price" msgstr "Price" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Rating" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Basic Info" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Important Dates" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Translations" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Order Product" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Order Products" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Is Business" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Config" @@ -489,55 +489,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "List all products (simple view)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(exact) Product UUID" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Product name" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(list) Category names, case-insensitive" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(exact) Category UUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(list) Tag names, case-insensitive" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Minimum stock price" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Maximum stock price" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(exact) Only active products" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Brand name" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Minimum stock quantity" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(exact) Product slug" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(exact) Digital vs. physical" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -545,34 +545,34 @@ msgstr "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Retrieve a single product (detailed view)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "Product UUID or Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Create a product" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Rewrite an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Update some fields of an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Delete a product" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "No search term provided." @@ -627,7 +627,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -815,7 +815,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promotions" @@ -831,11 +831,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Wishlists" @@ -981,8 +981,8 @@ msgstr "Attribute of this value" msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Associated product" @@ -1078,7 +1078,7 @@ msgstr "Optionally associate this product with a brand" msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Product tags" @@ -1098,7 +1098,7 @@ msgstr "Provide a clear identifying name for the product" msgid "product name" msgstr "Product name" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" @@ -1197,7 +1197,7 @@ msgstr "Current status of the order in its lifecycle" msgid "order status" msgstr "Order status" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" @@ -1235,55 +1235,59 @@ msgstr "human-readable ID" msgid "order" msgstr "Order" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} does not exist: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1291,188 +1295,188 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Invalid payment method" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "you cannot create a momental order without providing a billing address" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "User notifications" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Parent order" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Product line status" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Tag name" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Product tag" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Product image" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Display priority" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Product images" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "End validity time" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Promo code" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1480,140 +1484,140 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Included products" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promotion" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Selling price" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Digital file" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Download" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Downloads" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "You can not download a digital asset for a non-finished order" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documentary" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Unresolved" diff --git a/core/locale/en_US/LC_MESSAGES/django.mo b/core/locale/en_US/LC_MESSAGES/django.mo index fc54d5856476a037ffc8d1be7846b2229c395abb..68417d0f41d55002fd8b04b2039de039e2a17f3d 100644 GIT binary patch delta 9100 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -81,7 +81,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stock" @@ -89,7 +89,7 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -97,35 +97,35 @@ msgstr "Stocks" msgid "price" msgstr "Price" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Product rating" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Basic Info" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Important dates" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Translations" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Order Product" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Order Products" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Is Business" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Config" @@ -489,55 +489,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "List all products (simple view)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(exact) Product UUID" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Product name" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(list) Category names, case-insensitive" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(exact) Category UUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(list) Tag names, case-insensitive" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Minimum stock price" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Maximum stock price" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(exact) Only active products" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Brand name" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Minimum stock quantity" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(exact) Product slug" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(exact) Digital vs. physical" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -545,34 +545,34 @@ msgstr "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Retrieve a single product (detailed view)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "Product UUID or Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Create a product" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Rewrite an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Update some fields of an existing product, preserving non-editable fields" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Delete a product" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "No search term provided." @@ -627,7 +627,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Wrong type came from order.buy() method: {type(instance)!s}" @@ -815,7 +815,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Products on sale" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promotions" @@ -831,11 +831,11 @@ msgstr "Vendor" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Wishlisted products" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Wishlists" @@ -981,8 +981,8 @@ msgstr "Attribute of this value" msgid "the specific product associated with this attribute's value" msgstr "The specific product associated with this attribute's value" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Associated product" @@ -1078,7 +1078,7 @@ msgstr "Optionally associate this product with a brand" msgid "tags that help describe or group this product" msgstr "Tags that help describe or group this product" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Product tags" @@ -1098,7 +1098,7 @@ msgstr "Provide a clear identifying name for the product" msgid "product name" msgstr "Product name" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Add a detailed description of the product" @@ -1197,7 +1197,7 @@ msgstr "Current status of the order in its lifecycle" msgid "order status" msgstr "Order status" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "JSON structure of notifications to display to users, in admin UI the table-" @@ -1235,55 +1235,59 @@ msgstr "human-readable ID" msgid "order" msgstr "Order" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "You cannot add inactive products to order" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "You cannot add more products than available in stock" -#: core/models.py:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} does not exist: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} does not exist with query <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Promocode does not exist" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Invalid force value" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "You cannot purchase an empty order!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Insufficient funds to complete the order" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1291,188 +1295,188 @@ msgstr "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Invalid payment method" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "you cannot create a momental order without providing a billing address" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Purchase price at order time" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "Internal comments for admins about this ordered product" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Internal comments" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "User notifications" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "JSON representation of this item's attributes" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Ordered product attributes" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Reference to the parent order that contains this product" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Parent order" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "The specific product associated with this order line" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Quantity of this specific product in the order" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Product quantity" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Current status of this product in the order" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Product line status" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Internal tag identifier for the product tag" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Tag name" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "User-friendly name for the product tag" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Tag display name" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Product tag" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "Provide alternative text for the image for accessibility" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Image alt text" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Upload the image file for this product" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Product image" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Determines the order in which images are displayed" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Display priority" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "The product that this image represents" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Product images" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "Fixed discount amount applied if percent is not used" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Fixed discount amount" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "Percentage discount applied if fixed amount is not used" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Percentage discount" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Timestamp when the promocode expires" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "End validity time" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Timestamp from which this promocode is valid" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Start validity time" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Usage timestamp" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "User assigned to this promocode if applicable" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Assigned user" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Promo code" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1480,140 +1484,140 @@ msgstr "" "Only one type of discount should be defined (amount or percent), but not " "both or neither." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Promocode has been used already" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Invalid discount type for promocode {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Percentage discount for the selected products" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Discount percentage" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Provide a unique name for this promotion" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Promotion name" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Select which products are included in this promotion" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Included products" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promotion" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "The vendor supplying this product stock" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Associated vendor" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Final price to the customer after markups" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Selling price" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "The product associated with this stock entry" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "The price paid to the vendor for this product" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Vendor purchase price" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Available quantity of the product in stock" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Quantity in stock" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "Vendor-assigned SKU for identifying the product" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "Vendor's SKU" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Digital file associated with this stock if applicable" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Digital file" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Stock entries" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Products that the user has marked as wanted" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "User who owns this wishlist" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Wishlist's Owner" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Wishlist" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Download" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Downloads" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "You can not download a digital asset for a non-finished order" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documentary" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Unresolved" diff --git a/core/locale/es_ES/LC_MESSAGES/django.mo b/core/locale/es_ES/LC_MESSAGES/django.mo index 48c00c20dc7dfbe83897baf46a768569ebdaa606..623b42561b911a29ef1c0fe969639761a65ae838 100644 GIT binary patch delta 9109 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�jZoM~I$1~Vz=U^|?FiMSWllk?7+m9{?3ISMsZRTzOQF$#A&k76O^a~=}4 zy!9-*XfiRFa%a>K^+Vk_1jDh+l^0+t<&9VmPoZ9P5p~}URL6cot(8RPQ5~tm415FC zAm16tNkQ4z%!_Zev4i49@fXMPgn<| zo<9kBj>lAzr~#W$i)SmU$9qt7cMP+z=3M(N?}Q^LS7HL5MfLb+)R5PhXXm~S>c!15 z60cMvMBQ-G`7x?tcThd6!99Ah{_ReSwF~M+<*2D#gqn&~ zsKvMolW;%ky345N-^4nEsXgC*^XsE}o`$-yH+IHCY>CgJUU&ri;5F1@%vxZ#<9IBk zya09mb=3KAmb^x$3u;PxqSnR;^r+`6Nc!V0d;o7_A*S&6syM8|rnuXA0yP3(yK=}P zdp^}U0JTlaaV&1eq4*0H;ovI!7nfJ77=Nwe3smR@0gLV5R1#5hJ{&vXYSahhr1PKH zhH~N(d;L)CLAeUE@jc8#|EK6R_H`~t)t^FL7rd15A4bw=sr@V14pd8T;sETm%(@Z# zQT`VFF>AT|E}(YD4Af9BMy-*3ScdPQhCF?RU6gsK4^I(ls*61&wMm}9aae`5@GIx{ zsG+=#T2!%5Tic^Xs4uR=Dy+bmm9~B*_NDwTw#D#OcEq}4OUmV_HQ-rK(vjp8>VbaG z*tzL~n)_mGhD$I5_n?OKvMa}|w%cj|7EoV->fu`$h{rJ+KSaIwhO3WURB zbVY581vn8mpdN4!HAR8X+6EM(db9yk@m*K`2kQQWwRVcSU>nN$*chi_60Szw_azreSN;NIj2w@n!6d z0qgCW8H`c9-%KD$#yJ>FcBCd^3gz9Hju%j?x$Z{$z37RXDOaJ^ zK(kGDN~d5~%4<<0a}GTjBsI8Nt2Yz%;4#<=SE1IxVT{7Rp%&vUjKwBfxEFP3L|VCm zwqhglYW$A4O*A9e{^lb>>qJKjegAbdb2kP#_3~51Fv<^MUp#?~;D3(q$#%O^h`X;J zWoGj~M-|yq#0;XQyGCz(jJ!71(fgy_3Cd;!`J*^r1&(ZDpEt8V@}Zb(I$#r5AAlu9 zPxqYbu3oSt%y?Hn$<@Dsu|xyvC#W^|2o38BLPs7aMiaiaXpT5VG*LlRb6&?oxP;JG zjae}%@1NwtrwJX85uM5RdrN$5 z@UF}KsGml#%gp=4Qu0tDnP^YB++8R7Q>P=8_?alD{5R~P`FMxqC!(Ia=y&9w6OR!0 zk6kX|H?G-AJj=C{h`+n~h2(#5`Lp;q!H3g)OguyUkxzhHh)Tk9naX-ZO`YX< z&*J@Mli>1NT-ZDVOY^^n zWEAlu(S!^1?O#gp`^ftX2h3XPcj7lhPhve~9luz-KR@H=^F$$$<*ng=58%3yE`I@o zDUZPw*qvCezstQ%#YhSf#Qo#Y{lvNEzs_Y+_bE|>xtJ=vYV$rA|j6 zv61{yS6+oPsT)o7Ay0Sp$Myb~snl_fNGG1+r2d(0rMqY@b&bhWa4fNjXhS&;ZxLGv z9b?_~Pmn+Dt+BuNeW^c4IgJ?QuIWR5hX~aC=Tq6jo$#S@HF*@yb#)EM7Zd;MNaC6i zocNH~LhesYarY%)XX;b&4EA#Mi}5AOpAcQO|C2~ciFxGhP{&llhw^%SllTXrqaStI z#5M8?oQ|&%waLFg9i7M{u@qNgF!2ESi#P*y%)zFFXM?LyWe)Lw#KY9h#+!tWSjsoB zx3^^f`lR$cvBcGhc3iiPm_Yo7@*pBtC*1KM^*X|Eo=rX8|Kmv!g$3?pS9`+yb3S#$ zT{)9H(dAQ|@v0;CQf`kriY?xs|Ig3vL?tnV^MAo7@DZXBx%ab|d*F0jBfkR;TV2jN KkT!04_P+sVaubpO diff --git a/core/locale/es_ES/LC_MESSAGES/django.po b/core/locale/es_ES/LC_MESSAGES/django.po index e7701273..831ef492 100644 --- a/core/locale/es_ES/LC_MESSAGES/django.po +++ b/core/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Imagen" msgid "images" msgstr "Imágenes" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stock" @@ -91,7 +91,7 @@ msgstr "Stock" msgid "stocks" msgstr "Acciones" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Acciones" msgid "price" msgstr "Precio" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Valoración del producto" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Información básica" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Fechas importantes" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Traducciones" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Pedir un producto" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Pedir productos" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Es Negocio" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Configurar" @@ -513,57 +513,57 @@ msgstr "" msgid "list all products (simple view)" msgstr "Listar todos los productos (vista simple)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "UUID (exacto) del producto" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Nombre del producto" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "" "(lista) Nombres de categoría, sin distinción entre mayúsculas y minúsculas" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(exacto) Categoría UUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "" "(lista) Nombres de etiquetas, sin distinción entre mayúsculas y minúsculas" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Precio mínimo de las acciones" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Precio máximo de las acciones" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(exacto) Sólo productos activos" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Marca" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Cantidad mínima de existencias" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(exacto) Babosa del producto" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(exacto) Digital frente a físico" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -571,35 +571,35 @@ msgstr "" "Lista separada por comas de campos por los que ordenar. Prefiérela con `-` para que sea descendente. \n" "**Permitido:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Recuperar un solo producto (vista detallada)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "UUID o babosa del producto" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Crear un producto" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Reescribir un producto existente conservando los campos no editables" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Actualizar algunos campos de un producto existente, conservando los campos " "no editables" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Eliminar un producto" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "No se proporciona ningún término de búsqueda." @@ -654,7 +654,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Tipo incorrecto proveniente del método order.buy(): {type(instance)!s}" @@ -847,7 +847,7 @@ msgstr "Códigos promocionales" msgid "products on sale" msgstr "Productos a la venta" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promociones" @@ -863,11 +863,11 @@ msgstr "Vendedor" msgid "product" msgstr "Producto" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Productos deseados" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Listas de deseos" @@ -1014,8 +1014,8 @@ msgstr "Atributo de este valor" msgid "the specific product associated with this attribute's value" msgstr "El producto específico asociado al valor de este atributo" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Producto asociado" @@ -1111,7 +1111,7 @@ msgstr "Si lo desea, puede asociar este producto a una marca" msgid "tags that help describe or group this product" msgstr "Etiquetas que ayudan a describir o agrupar este producto" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Etiquetas del producto" @@ -1131,7 +1131,7 @@ msgstr "Proporcionar un nombre que identifique claramente el producto" msgid "product name" msgstr "Nombre del producto" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Añada una descripción detallada del producto" @@ -1234,7 +1234,7 @@ msgstr "Estado actual del pedido en su ciclo de vida" msgid "order status" msgstr "Estado del pedido" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "Estructura JSON de las notificaciones para mostrar a los usuarios, en la " @@ -1272,56 +1272,60 @@ msgstr "ID legible por humanos" msgid "order" msgstr "Pida" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "No se pueden añadir productos inactivos al pedido" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} no existe: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} no existe con la consulta <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Promocode no existe" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Valor de fuerza no válido" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "No se puede comprar un pedido vacío." -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Fondos insuficientes para completar el pedido" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1329,192 +1333,192 @@ 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:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Método de pago no válido" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "no puede crear un pedido momental sin indicar una dirección de facturación" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Precio de compra en el momento del pedido" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarios internos para los administradores sobre este producto solicitado" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Comentarios internos" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Notificaciones a los usuarios" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "Representación JSON de los atributos de este elemento" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Atributos ordenados del producto" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Referencia al pedido principal que contiene este producto" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Orden de los padres" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "El producto específico asociado a esta línea de pedido" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Cantidad de este producto específico en el pedido" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Cantidad de productos" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Estado actual de este producto en el pedido" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Estado de la línea de productos" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Identificador interno de la etiqueta del producto" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Nombre de la etiqueta" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Nombre fácil de usar para la etiqueta del producto" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Nombre de la etiqueta" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Etiqueta del producto" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" "Proporcione un texto alternativo para la imagen en aras de la accesibilidad" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Texto alternativo de la imagen" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Cargar el archivo de imagen para este producto" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Imagen del producto" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Determina el orden de visualización de las imágenes" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Prioridad de visualización" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "El producto que representa esta imagen" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Imágenes de productos" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Promo code identifier" -#: core/models.py:959 +#: core/models.py:964 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:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Importe fijo del descuento" -#: core/models.py:966 +#: core/models.py:971 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:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Porcentaje de descuento" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Fecha de caducidad del promocode" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Hora de fin de validez" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Fecha a partir de la cual es válido este promocode" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Hora de inicio de validez" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Marca de tiempo de uso" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Usuario asignado a este promocode si procede" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Usuario asignado" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Promo code" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Promo codes" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1522,140 +1526,140 @@ msgstr "" "Sólo debe definirse un tipo de descuento (importe o porcentaje), pero no " "ambos ni ninguno." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "El código promocional ya ha sido utilizado" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Tipo de descuento no válido para promocode {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Porcentaje de descuento para los productos seleccionados" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Porcentaje de descuento" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Proporcione un nombre único para esta promoción" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Nombre de la promoción" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Descripción de la promoción" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Seleccione los productos incluidos en esta promoción" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Productos incluidos" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promoción" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "El vendedor que suministra este producto dispone de" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Proveedor asociado" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Precio final al cliente después de márgenes" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Precio de venta" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "El producto asociado a esta entrada en stock" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "El precio pagado al vendedor por este producto" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Precio de compra al vendedor" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Cantidad disponible del producto en stock" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Cantidad en stock" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU asignada por el proveedor para identificar el producto" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU del vendedor" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Archivo digital asociado a esta acción, si procede" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Archivo digital" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Entradas en existencias" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Productos que el usuario ha marcado como deseados" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Usuario propietario de esta lista de deseos" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Propietario de Wishlist" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Lista de deseos" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Descargar" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Descargas" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "No puede descargar un activo digital para un pedido no finalizado" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documental" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentaries" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Sin resolver" diff --git a/core/locale/fr_FR/LC_MESSAGES/django.mo b/core/locale/fr_FR/LC_MESSAGES/django.mo index 0a1f885a7012a4f34625baf7a7708d057082829f..de1c6d1f407a66d8a016176c9795fed0e1ea743c 100644 GIT binary patch delta 9118 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 delta 8985 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 VA61Sn@n-pIce38h8#ul3e*lg&9#Q}R diff --git a/core/locale/fr_FR/LC_MESSAGES/django.po b/core/locale/fr_FR/LC_MESSAGES/django.po index 9762eb59..8d04603d 100644 --- a/core/locale/fr_FR/LC_MESSAGES/django.po +++ b/core/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Image" msgid "images" msgstr "Images" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stock" @@ -91,7 +91,7 @@ msgstr "Stock" msgid "stocks" msgstr "Stocks" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Stocks" msgid "price" msgstr "Prix" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Evaluation du produit" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Informations de base" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Important Dates" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Traductions" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Commander un produit" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Commander des produits" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Est l'entreprise" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Config" @@ -519,55 +519,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "Liste de tous les produits (vue simple)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "UUID (exact) du produit" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Nom du produit" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(liste) Noms de catégories, insensibles à la casse" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "UUID (exact) de la catégorie" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(liste) Noms d'étiquettes, insensibles à la casse" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Prix minimum de l'action" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Prix maximum de l'action" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(exact) Uniquement les produits actifs" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Nom de marque" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Quantité minimale en stock" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "UUID ou Slug du produit" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(exact) Numérique ou physique" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -575,35 +575,35 @@ msgstr "" "Liste de champs séparés par des virgules à trier. Préfixer avec `-` pour un tri descendant. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Récupérer un seul produit (vue détaillée)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "UUID ou Slug du produit" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Créer un produit" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Réécrire un produit existant en préservant les champs non modifiables" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Mettre à jour certains champs d'un produit existant, en préservant les " "champs non modifiables" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Supprimer un produit" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Aucun terme de recherche n'est fourni." @@ -660,7 +660,7 @@ msgstr "" "mutuellement !" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 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}" @@ -852,7 +852,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produits en vente" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promotions" @@ -868,11 +868,11 @@ msgstr "Vendeur" msgid "product" msgstr "Produit" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Produits en liste de souhaits" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Liste de souhaits" @@ -1020,8 +1020,8 @@ msgstr "Attribut de cette valeur" msgid "the specific product associated with this attribute's value" msgstr "Le produit spécifique associé à la valeur de cet attribut" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Produit associé" @@ -1118,7 +1118,7 @@ msgstr "Possibilité d'associer ce produit à une marque" msgid "tags that help describe or group this product" msgstr "Étiquettes permettant de décrire ou de regrouper ce produit" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Étiquettes du produit" @@ -1138,7 +1138,7 @@ msgstr "Fournir un nom d'identification clair pour le produit" msgid "product name" msgstr "Nom du produit" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Ajouter une description détaillée du produit" @@ -1240,7 +1240,7 @@ msgstr "Statut actuel de la commande dans son cycle de vie" msgid "order status" msgstr "Statut de la commande" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "Structure JSON des notifications à afficher aux utilisateurs ; dans " @@ -1278,61 +1278,65 @@ msgstr "ID lisible par l'homme" msgid "order" msgstr "Commande" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Vous ne pouvez pas ajouter des produits inactifs à la commande" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} n'existe pas : {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} n'existe pas avec la requête <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Le code promotionnel n'existe pas" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Valeur de force non valide" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Vous ne pouvez pas acheter une commande vide !" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Insuffisance de fonds pour compléter la commande" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1341,195 +1345,195 @@ msgstr "" "informations suivantes : nom du client, courriel du client, numéro de " "téléphone du client" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Méthode de paiement non valide" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "vous ne pouvez pas créer une commande momentanée sans fournir d'adresse de " "facturation" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Prix d'achat au moment de la commande" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "" "Commentaires internes pour les administrateurs sur ce produit commandé" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Commentaires internes" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Notifications aux utilisateurs" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "Représentation JSON des attributs de cet élément" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Attributs du produit ordonnés" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Référence à l'ordre parent qui contient ce produit" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Ordonnance parentale" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Le produit spécifique associé à cette ligne de commande" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Quantité de ce produit spécifique dans la commande" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Quantité de produits" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Statut actuel de ce produit dans la commande" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Statut de la ligne de produits" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Identifiant interne de l'étiquette du produit" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Nom du jour" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Nom convivial pour l'étiquette du produit" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Nom d'affichage de l'étiquette" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Étiquette du produit" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "Fournir un texte alternatif pour l'image afin d'en faciliter l'accès" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Texte alt de l'image" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Télécharger le fichier image pour ce produit" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Image du produit" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Détermine l'ordre d'affichage des images" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Priorité à l'affichage" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Le produit que cette image représente" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Images du produit" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Identifiant du code promotionnel" -#: core/models.py:959 +#: core/models.py:964 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:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Montant de l'escompte fixe" -#: core/models.py:966 +#: core/models.py:971 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:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Pourcentage de réduction" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Date d'expiration du code promotionnel" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Heure de fin de validité" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Date à partir de laquelle ce code promotionnel est valable" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Heure de début de validité" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Horodatage de l'utilisation" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Utilisateur assigné à ce code promo, le cas échéant" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Utilisateur assigné" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Code promo" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Codes promotionnels" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1537,142 +1541,142 @@ msgstr "" "Un seul type de remise doit être défini (montant ou pourcentage), mais pas " "les deux ni aucun des deux." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Le code promotionnel a déjà été utilisé" -#: core/models.py:1033 +#: core/models.py:1038 #, 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:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Pourcentage de réduction pour les produits sélectionnés" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Pourcentage de réduction" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Donnez un nom unique à cette promotion" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Nom de la promotion" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Promotion description" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Sélectionnez les produits inclus dans cette promotion" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Produits inclus" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promotion" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Le vendeur qui fournit ce stock de produits" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Vendeur associé" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Prix final pour le client après majoration" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Prix de vente" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Le produit associé à cette entrée de stock" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "Le prix payé au vendeur pour ce produit" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Prix d'achat du vendeur" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Quantité disponible du produit en stock" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Quantité en stock" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU attribué par le fournisseur pour identifier le produit" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "UGS du vendeur" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Fichier numérique associé à ce stock, le cas échéant" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Fichier numérique" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Entrées de stock" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Produits que l'utilisateur a marqués comme souhaités" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Utilisateur qui possède cette liste de souhaits" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Propriétaire de la liste de souhaits" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Liste de souhaits" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Télécharger" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Téléchargements" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Vous ne pouvez pas télécharger un bien numérique pour une commande non " "terminée." -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documentaire" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Non résolu" diff --git a/core/locale/hi_IN/LC_MESSAGES/django.po b/core/locale/hi_IN/LC_MESSAGES/django.po index 5aed5588..27e44e03 100644 --- a/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/core/locale/hi_IN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -82,7 +82,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "" @@ -90,7 +90,7 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -98,35 +98,35 @@ msgstr "" msgid "price" msgstr "" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "" @@ -471,88 +471,88 @@ msgstr "" msgid "list all products (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for " "descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "" @@ -607,7 +607,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -789,7 +789,7 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "" @@ -805,11 +805,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "" @@ -955,7 +955,7 @@ msgstr "" msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:142 core/models.py:814 core/models.py:928 core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 core/models.py:1099 msgid "associated product" msgstr "" @@ -1051,7 +1051,7 @@ msgstr "" msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "" @@ -1071,7 +1071,7 @@ msgstr "" msgid "product name" msgstr "" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "" @@ -1167,7 +1167,7 @@ msgstr "" msgid "order status" msgstr "" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" @@ -1203,379 +1203,383 @@ msgstr "" msgid "order" msgstr "" -#: core/models.py:536 -msgid "you cannot add products to an order that is not a pending one" +#: core/models.py:517 +msgid "a user must have only one pending order at a time" msgstr "" #: core/models.py:541 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" + +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:567 core/models.py:584 core/models.py:608 core/models.py:1165 -#: core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 core/models.py:1170 +#: core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:629 +#: core/models.py:634 msgid "invalid force value" msgstr "" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" -#: core/models.py:779 +#: core/models.py:784 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "" -#: core/models.py:951 +#: core/models.py:956 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "" -#: core/models.py:984 +#: core/models.py:989 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "" diff --git a/core/locale/it_IT/LC_MESSAGES/django.mo b/core/locale/it_IT/LC_MESSAGES/django.mo index 53da0f432b26b3eb60aeb0ebf1e47dd1fae7ef4a..78865871d05e3d5b381fc58db7acb29c16933a8b 100644 GIT binary patch delta 9107 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 J^30ye{|0UvL@fXS delta 8985 zcmZwNcX*f8-N*4m2pJ><5;7P80tpErWDx>kNq~?rgNzXN9)?62ve%EjMTkrjggl@X zfeI?pB2+?^s)$t{sfY+g#L+Sw2tEq6@6YcXdi9UzzWC;KzUN+N-if_>{TA zVgf#g+-goE*Llph6gE>)HO`pExE+u97;_Buf~nk)x-7=(jS4H)mvKaG0sc9-u-X8bi52dD_aO4N{jh&AvUY7W207z|FaJxE6N zC=)f*-B8yLLp7)f_1syghOcwyOVO8nH>#u0r!f8+`lD26NZ&!N-b>EAs29~rwGE3w z4PgfAMeUKnG2M|-H#1Rdslw%dKwbYOX5kHNi%rvP14el$r~%VZ4Ooh5z*grWtV#YJ zYGf{=hWI9GDDR=>+=mHQgEBD_yP%#o2W#Pa)ClcFP0fDPZu1>F#&U&C8(j^?0g;dDZPM=@Giz+B=e#nZG#$t4po=8XZ$s^m#NSLZlZer1FA=X9qfoiV;%A|R6~2X`a;wc6eBy;OvfQu zff|WlQH!o+M|*xaYD(9kp1-LhlY?4x3sLu%qNZvW>N)#SYvCQ|haL)=^9!g&aRZYvu9N-c(;u}Mx1k>VEvg6q zLOsYg+uk3H>Oc&t11YHIc0@I#AL=_W5_NtGs$rf*6m-E_)CJp6bM&Ii4`UShDNMqP zsO$YY+YeA}j394_dSENm$Yi6YtPu5~nu=Py^HJBYKpNsPW$uEPkdK);f-(3NYPI@z zu|u1NT3kig2iT||g5ywASBhF2J1|T8|3eB|oq;*FW&Kbu zn1oGmmGdQRN`BVmKVn_-$ZqzU=REXV=yh(PGLXPNKZuX{+~@Dor*oq z^Qa#A)2ak)iCV=&QT5AFi|u7>iQl-qes}wvfv6s@L^hH+;_AOgE;X^ViorF-=uyQ% z3fcG*vcOI2o;II>zT`)cudO+TT4c9TBl7^&lbBw7{V*N1xHg~`-%hNChf(((ML&ES znKko%FUDULHGA7d5{bI8G3vpY7=XE$jD4{b7vdzW)yIy|9Ly%)jk@kCw!oVC_IE@F zY(_o~H6rU#9eO99`EN?$0TsX?Vjg6WTmSdMDoX;cGmU_3_kw;!HIP*aqT z>iGZ+!zEZBH=`PS2zB3iO+gv9$M;Y@_ZwsX4rq&w$scz< zjh=KW4!eqL&T3=rH$MUCtm%YIm)U`gqPd0YLGC!)qtUpHd=X|~V%)MDOp7Ga-Qdd!q(d36*eirMIUqwyHebmr~O|TD0MBU#JV=xajB9CD>ZpSuw z5H8?zswW?#8h9Q3&}Wi;Q6M%ZZ|L%D z)M_ulnm8V7;0)AzmZBQI-{T5LoNuCD{4Q#!uDkl5Q9bf`%no@J>U)rhzBn2+G80fQ zUVwV>I@C~?q1M*R?)+b!p34-}lbfg)+(ErKu*lvRjas#7&U{y2;#`cne>19wWvD6G zhuXHEq8jEm+5U2BfcmcV#XRl*VHC2d*n=ACFVQ>KE)OfVL)#qVINuv}-8APKtWI9x zJb{(lw!;JHk6)vP{x$|+)hFx-2cz=Fn8^E0a|(L#K&-@PP(xZU#jgJ0m`gqz)sR0S z-z0MeSy>6-$V7>JZb;pse@`*3F`b@tcgpp7M5Zg+=EH@8LET+GZ=qe5HiF2=bLGS zEy>4WHf}}r;1g_!KVTw;&NQYcwnt6XN({n{sOOcV8h8-9;@g;ofwS!24_#0VI6sT= zSBoxDQ3C^J+g~1$7)ss_TVro*i_0(tPhcCo;f$MO|4tZ=I$w$!(MpWK(-?!7P(%L! zdtn35T)TRUP(7J}dhsIE12$r9+=A-aJ`BTSs280@-FM&B`^~e9uP$a%-x!Oq(B+k= zhTn5~Qs>*Dn1tb+cmmacWvCZzK{en-SAQJUgAbgyP(vBA!0v(wRF6|pL*LESuR%R$ z4{B{3#aQkCzfe#Q{^|S)_2SFD^h0Wv$!jmRAF{5f=S;xroHKJNMB{SQ3oB4xw4<1br?4shj9RP>m+;2~_QXVd1{>oE z)ONjsEwI~Cdwx1?0W8?CYqMD<_| z>iXlTPx5!Dk?FXa>A{t#HFL=szs7z^r=qSqx`y!|PQk3TU$PN6lJqdD<+avXC*uI} zw=f9nthXtyL3b){5Jc!y=DNos7>s_%L`6$$V6Fd|&H?vVMT!Q}i83y1r z)PrweFh*^##$h}1bo?EbAfEse{DZ^NjtX`eR+v2#m*6td4__wdFBm zC}dONaVJiq9&`pZ)CrsIqRBwDcr9u>Ribvs_n55fw%89#0jdELP#q{it@@Wx9jU|= zypBn{--K_qJ;_GhxBx?N8ER@uQLD8a!|)Ww;CT$iyO@Om+wAq7aRzxWY>y|g4c^Co z*lN3d&Pr^m{l9~PTJ$E?##`mT712$989G=BQyz7kFX}@$mu_5(SQ0F(G_Wd8Q3hIa^nz=-c ztVfyC=AXn*gs$f^U@j5)gbqek{pX~+v4&HPd55=XpIyR zdG0wkRp}1am>KKpC%L*eFovi@{W!JeH$r=yZ-w{B;lyyl*X75YqCPQ=*vWYvBXAXw zLz(F{sg(1H36$Gm3GsiFA0@gF9`c9BM9O-qWO56!d)W7UG#g( zUlNZI50B?vVHxfsp5fX_#1F21Ddj)8G9OMeli*8i{!Z{^H*XR;%D8SMv5}ZVcs{2x zgs7^s9A_-vKSUB-*^djWQU1{751B#zZjyKmC%&fq2+^GKTGZE4AD|XQ3U!l-Pbus8 zGtpi1zmLK&;ttV}3ntDgQ@#-}bt_t&iii)8m5yZpe^@jy#>3^Ner0xr%3UzPcKZpX#=Ws5eV-ulI zxsDa?-fV2+%Bp{osO0_Lqp!0qZYTN?wYfMMFB3Z6CDwUMe0s5#D~otn&f*^Z);vkX zQ6A%7n1Ma1dq6B9dXT?@58rR1sc1yS%Y=@B#BU0DXJ19Ty@~3e&b;F5Xlv}#`(|Z2_Ds_BJv?Nw@QvWmC26xdy>Kaf^#nHsGL<{mJ z_#;tH=osy;UqJaOZ;k!q)tCAsH89d&e|9Erua0c#R%DZhZTP{(|1M0mEl3RPwk9}p9$n}^>M zI%3FgV-Ig;|9DXGJh95viB?>\n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Immagine" msgid "images" msgstr "Immagini" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stock" @@ -91,7 +91,7 @@ msgstr "Stock" msgid "stocks" msgstr "Le scorte" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Le scorte" msgid "price" msgstr "Prezzo" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Valutazione del prodotto" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Informazioni di base" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Date importanti" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Traduzioni" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Ordina il prodotto" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Ordinare i prodotti" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "È Business" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Configurazione" @@ -519,56 +519,56 @@ msgstr "" msgid "list all products (simple view)" msgstr "Elenco di tutti i prodotti (visualizzazione semplice)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(esatto) UUID del prodotto" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Nome del prodotto" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "" "(elenco) Nomi di categoria, senza distinzione tra maiuscole e minuscole" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(esatto) UUID della categoria" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(elenco) Nomi di tag, senza distinzione tra maiuscole e minuscole" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Prezzo minimo delle azioni" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Prezzo massimo del titolo" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(esatto) Solo prodotti attivi" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Nome del marchio" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Quantità minima di scorte" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(esatto) Prodotto slug" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(esatto) Digitale e fisico" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -576,36 +576,36 @@ msgstr "" "Elenco separato da virgole dei campi da ordinare. Prefisso con `-` per l'ordinamento discendente. \n" "**Consentito:** uuid, rating, nome, slug, creato, modificato, prezzo, casuale" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Recuperare un singolo prodotto (vista dettagliata)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "UUID o Slug del prodotto" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Creare un prodotto" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Riscrivere un prodotto esistente, preservando i campi non modificabili" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Aggiornare alcuni campi di un prodotto esistente, preservando i campi non " "modificabili" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Eliminare un prodotto" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Non è stato fornito alcun termine di ricerca." @@ -661,7 +661,7 @@ msgstr "" "Si prega di fornire order_uuid o order_hr_id, che si escludono a vicenda!" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" "Il metodo order.buy() ha fornito un tipo sbagliato: {type(instance)!s}" @@ -852,7 +852,7 @@ msgstr "Codici promozionali" msgid "products on sale" msgstr "Prodotti in vendita" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promozioni" @@ -868,11 +868,11 @@ msgstr "Venditore" msgid "product" msgstr "Prodotto" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Prodotti desiderati" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Liste dei desideri" @@ -1019,8 +1019,8 @@ msgstr "Attributo di questo valore" msgid "the specific product associated with this attribute's value" msgstr "Il prodotto specifico associato al valore di questo attributo" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Prodotto associato" @@ -1117,7 +1117,7 @@ msgstr "Associare facoltativamente questo prodotto a un marchio" msgid "tags that help describe or group this product" msgstr "Tag che aiutano a descrivere o raggruppare questo prodotto" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Tag del prodotto" @@ -1137,7 +1137,7 @@ msgstr "Fornire un nome identificativo chiaro per il prodotto" msgid "product name" msgstr "Nome del prodotto" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Aggiungere una descrizione dettagliata del prodotto" @@ -1237,7 +1237,7 @@ msgstr "Stato attuale dell'ordine nel suo ciclo di vita" msgid "order status" msgstr "Stato dell'ordine" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "Struttura JSON delle notifiche da mostrare agli utenti; nell'interfaccia " @@ -1275,56 +1275,60 @@ msgstr "ID leggibile dall'uomo" msgid "order" msgstr "Ordine" -#: core/models.py:536 +#: core/models.py:517 +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:541 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 corso." -#: core/models.py:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Non è possibile aggiungere all'ordine prodotti inattivi" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "" "Non è possibile aggiungere più prodotti di quelli disponibili in magazzino" -#: core/models.py:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} non esiste: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} non esiste con la query <{query}>." -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Il codice promozionale non esiste" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Valore di forza non valido" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Non è possibile acquistare un ordine vuoto!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Fondi insufficienti per completare l'ordine" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1333,194 +1337,194 @@ msgstr "" "seguenti informazioni: nome del cliente, email del cliente, numero di " "telefono del cliente" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Metodo di pagamento non valido" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "non è possibile creare un ordine momentaneo senza fornire un indirizzo di " "fatturazione" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Prezzo di acquisto al momento dell'ordine" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "Commenti interni per gli amministratori su questo prodotto ordinato" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Commenti interni" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Notifiche degli utenti" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "Rappresentazione JSON degli attributi di questo elemento" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Attributi del prodotto ordinati" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Riferimento all'ordine padre che contiene questo prodotto" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Ordine dei genitori" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Il prodotto specifico associato a questa riga d'ordine" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Quantità di questo prodotto specifico nell'ordine" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Quantità di prodotto" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Stato attuale di questo prodotto nell'ordine" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Stato della linea di prodotti" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Identificatore interno dell'etichetta del prodotto" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Nome del tag" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Nome intuitivo per l'etichetta del prodotto" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Nome del tag" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Etichetta del prodotto" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" "Fornire un testo alternativo per l'immagine ai fini dell'accessibilità." -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Testo alt dell'immagine" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Caricare il file immagine per questo prodotto" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Immagine del prodotto" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Determina l'ordine di visualizzazione delle immagini" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Priorità del display" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Il prodotto che questa immagine rappresenta" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Immagini del prodotto" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Identificatore del codice promozionale" -#: core/models.py:959 +#: core/models.py:964 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:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Importo fisso dello sconto" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "Sconto percentuale applicato se l'importo fisso non viene utilizzato" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Sconto percentuale" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Data di scadenza del codice promozionale" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Tempo di validità finale" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Data a partire dalla quale il codice promozionale è valido" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Tempo di validità iniziale" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Timestamp d'uso" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Utente assegnato a questo codice promozionale, se applicabile" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Utente assegnato" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Codice promozionale" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Codici promozionali" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1528,140 +1532,140 @@ msgstr "" "È necessario definire un solo tipo di sconto (importo o percentuale), ma non" " entrambi o nessuno dei due." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Il codice promozionale è già stato utilizzato" -#: core/models.py:1033 +#: core/models.py:1038 #, 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:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Percentuale di sconto per i prodotti selezionati" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Percentuale di sconto" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Fornite un nome unico per questa promozione" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Nome della promozione" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Descrizione della promozione" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Selezionare i prodotti inclusi in questa promozione" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Prodotti inclusi" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promozione" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Il venditore che fornisce questo stock di prodotti" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Venditore associato" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Prezzo finale al cliente dopo i ricarichi" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Prezzo di vendita" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Il prodotto associato a questa voce di magazzino" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "Il prezzo pagato al venditore per questo prodotto" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Prezzo di acquisto del fornitore" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Quantità disponibile del prodotto in magazzino" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Quantità in magazzino" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU assegnato dal fornitore per identificare il prodotto" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU del venditore" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "File digitale associato a questo stock, se applicabile" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "File digitale" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Voci di magazzino" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Prodotti che l'utente ha contrassegnato come desiderati" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Utente che possiede questa wishlist" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Proprietario della lista dei desideri" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Lista dei desideri" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Scaricare" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Scaricamento" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "Non è possibile scaricare un bene digitale per un ordine non finito." -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documentario" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentari" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Non risolto" diff --git a/core/locale/ja_JP/LC_MESSAGES/django.mo b/core/locale/ja_JP/LC_MESSAGES/django.mo index ec450840fdf7b19b5d3d525e93763ef30de5c587..c8b3940ffee81e2ff5b0019ea9a4d399d57ad777 100644 GIT binary patch delta 9133 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 AaR2}S delta 8985 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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 b64f396e..10fe112d 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: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -79,7 +79,7 @@ msgstr "画像" msgid "images" msgstr "画像" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "在庫" @@ -87,7 +87,7 @@ msgstr "在庫" msgid "stocks" msgstr "株式" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -95,35 +95,35 @@ msgstr "株式" msgid "price" msgstr "価格" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "製品評価" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "基本情報" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "重要な日程" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "翻訳" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "商品のご注文" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "商品のご注文" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "ビジネス" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "コンフィグ" @@ -477,55 +477,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "全商品を一覧表示(シンプル表示)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(正確には)製品UUID" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(アイコン) 製品名" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(リスト)カテゴリー名、大文字と小文字は区別しない" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(正確には)カテゴリーUUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(リスト) タグ名、大文字と小文字は区別されない" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(最低株価" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(最大株価" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(正確には)アクティブ製品のみ" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(商品名" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(最低在庫量" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(正確には)製品スラッグ" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(正確には)デジタルとフィジカル" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -533,33 +533,33 @@ msgstr "" "カンマ区切りの並べ替えフィールドのリスト。降順の場合は `-` をプレフィックスとしてつける。 \n" "**許可:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "単一の製品を取得する(詳細表示)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "製品UUIDまたはスラグ" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "製品を作る" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "編集不可能なフィールドを保持したまま、既存の製品を書き換える。" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "編集不可能なフィールドを保持したまま、既存の製品の一部のフィールドを更新する。" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "製品を削除する" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "検索語はありません。" @@ -614,7 +614,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "order_uuidまたはorder_hr_idを入力してください!" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy()メソッドから間違った型が来た:{type(instance)!s}。" @@ -797,7 +797,7 @@ msgstr "プロモコード" msgid "products on sale" msgstr "販売商品" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "プロモーション" @@ -813,11 +813,11 @@ msgstr "ベンダー" msgid "product" msgstr "製品" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "ウィッシュリスト掲載商品" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "ウィッシュリスト" @@ -963,8 +963,8 @@ msgstr "この値の属性" msgid "the specific product associated with this attribute's value" msgstr "この属性の値に関連する特定の製品" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "関連製品" @@ -1060,7 +1060,7 @@ msgstr "オプションでこの製品をブランドと関連付ける" msgid "tags that help describe or group this product" msgstr "この商品の説明やグループ分けに役立つタグ" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "商品タグ" @@ -1080,7 +1080,7 @@ msgstr "製品の明確な識別名を提供する" msgid "product name" msgstr "商品名" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "商品の詳細説明を追加する" @@ -1177,7 +1177,7 @@ msgstr "ライフサイクルにおける現在の注文状況" msgid "order status" msgstr "注文状況" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "ユーザーに表示する通知のJSON構造、管理UIではテーブルビューが使用されます。" @@ -1213,379 +1213,383 @@ msgstr "人間が読めるID" msgid "order" msgstr "オーダー" -#: core/models.py:536 +#: core/models.py:517 +msgid "a user must have only one pending order at a time" +msgstr "ユーザーは一度に1つの未決注文しか持つことができません!" + +#: core/models.py:541 msgid "you cannot add products to an order that is not a pending one" msgstr "保留中の注文以外の注文に商品を追加することはできません。" -#: core/models.py:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "アクティブでない商品を注文に追加することはできません。" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "在庫以上の商品を追加することはできません。" -#: core/models.py:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name}が存在しません:{product_uuid}が存在しません。" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 msgid "you cannot remove products from an order that is not a pending one" msgstr "保留中の注文以外の注文から商品を削除することはできません。" -#: core/models.py:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "クエリ<{query}>で{name}が存在しません。" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "プロモコードが存在しない" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "現在ご購入いただけません。数分後にもう一度お試しください。" -#: core/models.py:629 +#: core/models.py:634 msgid "invalid force value" msgstr "無効なフォース値" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "空注文はできません!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "注文を完了するための資金不足" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "ご登録がない場合はご購入いただけませんので、以下の情報をお知らせください:お客様のお名前、お客様のEメール、お客様の電話番号" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "無効な支払い方法" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "請求先住所を記入せずに、モーメンタルの注文を作成することはできません。" -#: core/models.py:779 +#: core/models.py:784 msgid "the price paid by the customer for this product at purchase time" msgstr "この商品の購入時に顧客が支払った価格" -#: core/models.py:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "注文時の購入価格" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "この注文商品に関する管理者への内部コメント" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "社内コメント" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "ユーザー通知" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "このアイテムの属性のJSON表現" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "製品属性の順序" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "この商品を含む親注文への参照" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "親注文" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "この注文ラインに関連する特定の製品" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "注文に含まれる特定の商品の数量" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "製品数量" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "この商品の現在のご注文状況" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "製品ラインの状況" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "商品タグの内部タグ識別子" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "タグ名" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "商品タグのユーザーフレンドリーな名前" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "タグ表示名" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "商品タグ" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "アクセシビリティのために、画像に代替テキストを提供する。" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "画像のaltテキスト" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "この商品の画像ファイルをアップロードする" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "商品画像" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "画像の表示順を決める" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "表示優先度" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "この画像が表す製品" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "商品画像" -#: core/models.py:951 +#: core/models.py:956 msgid "unique code used by a user to redeem a discount" msgstr "ユーザーが割引を利用する際に使用する固有のコード" -#: core/models.py:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "プロモコード識別子" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "パーセントを使用しない場合に適用される固定割引額" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "固定割引額" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "定額を使用しない場合に適用される割引率" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "割引率" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "プロモコードの有効期限が切れるタイムスタンプ" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "終了有効時間" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "このプロモコードが有効なタイムスタンプ" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "開始有効時間" -#: core/models.py:984 +#: core/models.py:989 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "プロモコードが使用されたタイムスタンプ、未使用の場合は空白" -#: core/models.py:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "使用タイムスタンプ" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "該当する場合、このプロモコードに割り当てられたユーザー" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "担当ユーザー" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "プロモコード" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "プロモコード" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "割引の種類は1つだけ(金額またはパーセント)定義されるべきで、両方またはどちらも定義してはならない。" -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "プロモコードはすでに使用されています" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "プロモコード {self.uuid} の割引タイプが無効です。" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "選択した商品の割引率" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "割引率" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "このプロモーションのユニークな名前を入力してください。" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "プロモーション名" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "プロモーション内容" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "キャンペーン対象商品をお選びください。" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "含まれる製品" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "プロモーション" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "この製品の在庫を供給しているベンダー" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "関連ベンダー" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "マークアップ後の顧客への最終価格" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "販売価格" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "このストックエントリーに関連する製品" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "この製品に対してベンダーに支払われた価格" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "ベンダーの購入価格" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "在庫数" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "在庫数" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "製品を識別するためにベンダーが割り当てたSKU" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "ベンダーのSKU" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "この銘柄に関連するデジタルファイル(該当する場合" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "デジタルファイル" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "ストックエントリー" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "ユーザーが欲しいとマークした商品" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "このウィッシュリストを所有しているユーザー" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "ウィッシュリストのオーナー" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "ウィッシュリスト" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "ダウンロード" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "ダウンロード" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "未完成の注文のデジタル資産をダウンロードすることはできません。" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "ドキュメンタリー" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "ドキュメンタリー" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "未解決" diff --git a/core/locale/kk_KZ/LC_MESSAGES/django.po b/core/locale/kk_KZ/LC_MESSAGES/django.po index 5aed5588..27e44e03 100644 --- a/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -82,7 +82,7 @@ msgstr "" msgid "images" msgstr "" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "" @@ -90,7 +90,7 @@ msgstr "" msgid "stocks" msgstr "" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -98,35 +98,35 @@ msgstr "" msgid "price" msgstr "" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "" @@ -471,88 +471,88 @@ msgstr "" msgid "list all products (simple view)" msgstr "" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for " "descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" msgstr "" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "" @@ -607,7 +607,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "" @@ -789,7 +789,7 @@ msgstr "" msgid "products on sale" msgstr "" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "" @@ -805,11 +805,11 @@ msgstr "" msgid "product" msgstr "" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "" @@ -955,7 +955,7 @@ msgstr "" msgid "the specific product associated with this attribute's value" msgstr "" -#: core/models.py:142 core/models.py:814 core/models.py:928 core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 core/models.py:1099 msgid "associated product" msgstr "" @@ -1051,7 +1051,7 @@ msgstr "" msgid "tags that help describe or group this product" msgstr "" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "" @@ -1071,7 +1071,7 @@ msgstr "" msgid "product name" msgstr "" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "" @@ -1167,7 +1167,7 @@ msgstr "" msgid "order status" msgstr "" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" @@ -1203,379 +1203,383 @@ msgstr "" msgid "order" msgstr "" -#: core/models.py:536 -msgid "you cannot add products to an order that is not a pending one" +#: core/models.py:517 +msgid "a user must have only one pending order at a time" msgstr "" #: core/models.py:541 +msgid "you cannot add products to an order that is not a pending one" +msgstr "" + +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "" -#: core/models.py:567 core/models.py:584 core/models.py:608 core/models.py:1165 -#: core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 core/models.py:1170 +#: core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 msgid "you cannot remove products from an order that is not a pending one" msgstr "" -#: core/models.py:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" -#: core/models.py:629 +#: core/models.py:634 msgid "invalid force value" msgstr "" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" -#: core/models.py:779 +#: core/models.py:784 msgid "the price paid by the customer for this product at purchase time" msgstr "" -#: core/models.py:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "" -#: core/models.py:951 +#: core/models.py:956 msgid "unique code used by a user to redeem a discount" msgstr "" -#: core/models.py:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "" -#: core/models.py:984 +#: core/models.py:989 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" -#: core/models.py:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "" -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "" diff --git a/core/locale/nl_NL/LC_MESSAGES/django.mo b/core/locale/nl_NL/LC_MESSAGES/django.mo index 1dfe01d77f817b6e2bc9f19b129fc136e8ea2e01..b8bdacd99ed50d29c0789d19baffdc2c914cade3 100644 GIT binary patch delta 9110 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -81,7 +81,7 @@ msgstr "Afbeelding" msgid "images" msgstr "Afbeeldingen" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Voorraad" @@ -89,7 +89,7 @@ msgstr "Voorraad" msgid "stocks" msgstr "Aandelen" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -97,35 +97,35 @@ msgstr "Aandelen" msgid "price" msgstr "Prijs" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Productbeoordeling" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Basisinformatie" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Belangrijke data" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Vertalingen" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Product bestellen" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Producten bestellen" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Is zakelijk" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Config" @@ -519,55 +519,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "Alle producten weergeven (eenvoudige weergave)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(exacte) UUID van product" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(pictogrammen) Productnaam" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(lijst) Categorienamen, hoofdlettergevoelig" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(exacte) UUID van categorie" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(lijst) Labelnamen, hoofdlettergevoelig" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Minimale aandelenprijs" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Maximale aandelenprijs" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(exact) Alleen actieve producten" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Merknaam" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Minimumvoorraad" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(exacte) productnaam" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(exact) Digitaal vs. fysiek" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -575,36 +575,36 @@ msgstr "" "Door komma's gescheiden lijst van velden om op te sorteren. Voorvoegsel met `-` voor aflopend. \n" "**Toegestaan:** uuid, beoordeling, naam, slug, gemaakt, gewijzigd, prijs, willekeurig" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Een enkel product ophalen (gedetailleerde weergave)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "Product UUID of Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Een product maken" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Een bestaand product herschrijven met behoud van niet-wijzigbare velden" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Enkele velden van een bestaand product bijwerken, met behoud van niet-" "wijzigbare velden" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Een product verwijderen" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Geen zoekterm opgegeven." @@ -659,7 +659,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Verkeerd type kwam uit order.buy() methode: {type(instance)!s}" @@ -849,7 +849,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Producten te koop" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promoties" @@ -865,11 +865,11 @@ msgstr "Verkoper" msgid "product" msgstr "Product" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Gewenste producten" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Verlanglijst" @@ -1017,8 +1017,8 @@ msgstr "Attribuut van deze waarde" msgid "the specific product associated with this attribute's value" msgstr "Het specifieke product geassocieerd met de waarde van dit kenmerk" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Bijbehorend product" @@ -1114,7 +1114,7 @@ msgstr "Dit product optioneel koppelen aan een merk" msgid "tags that help describe or group this product" msgstr "Tags die dit product helpen beschrijven of groeperen" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Product tags" @@ -1134,7 +1134,7 @@ msgstr "Zorg voor een duidelijke identificerende naam voor het product" msgid "product name" msgstr "Naam product" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Voeg een gedetailleerde beschrijving van het product toe" @@ -1236,7 +1236,7 @@ msgstr "Huidige status van de order in zijn levenscyclus" msgid "order status" msgstr "Bestelstatus" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "JSON-structuur van meldingen om weer te geven aan gebruikers, in admin UI " @@ -1274,59 +1274,63 @@ msgstr "menselijk leesbare ID" msgid "order" msgstr "Bestel" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "U kunt geen inactieve producten toevoegen aan uw bestelling" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} bestaat niet: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} bestaat niet met query <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Promocode bestaat niet" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Ongeldige krachtwaarde" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Je kunt geen lege bestelling kopen!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Onvoldoende fondsen om de bestelling te voltooien" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1334,193 +1338,193 @@ msgstr "" "u niet kunt kopen zonder registratie, geef dan de volgende informatie: " "klantnaam, e-mail klant, telefoonnummer klant" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Ongeldige betaalmethode" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "je kunt geen momentbestelling maken zonder een factuuradres op te geven" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Aankoopprijs bij bestelling" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "Interne opmerkingen voor beheerders over dit bestelde product" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Interne opmerkingen" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Meldingen van gebruikers" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "JSON weergave van de attributen van dit item" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Geordende producteigenschappen" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Verwijzing naar de bovenliggende bestelling die dit product bevat" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Ouderlijk bevel" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Het specifieke product dat bij deze bestelregel hoort" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Hoeveelheid van dit specifieke product in de bestelling" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Hoeveelheid product" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Huidige status van dit product in de bestelling" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Status productlijn" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Interne tagidentifier voor de producttag" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Tag naam" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Gebruiksvriendelijke naam voor de producttag" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Tag weergavenaam" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Productlabel" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "Geef alternatieve tekst voor de afbeelding voor toegankelijkheid" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Alt-tekst afbeelding" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Upload het afbeeldingsbestand voor dit product" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Product afbeelding" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Bepaalt de volgorde waarin afbeeldingen worden weergegeven" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Prioriteit weergeven" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Het product dat deze afbeelding vertegenwoordigt" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Product afbeeldingen" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Promo code identificatie" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "" "Vast kortingsbedrag dat wordt toegepast als percentage niet wordt gebruikt" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Vast kortingsbedrag" -#: core/models.py:966 +#: core/models.py:971 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:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Kortingspercentage" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Tijdstempel wanneer de promocode verloopt" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Geldigheidsduur einde" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Tijdstempel vanaf wanneer deze promocode geldig is" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Begin geldigheidsduur" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Gebruik tijdstempel" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Gebruiker toegewezen aan deze promocode indien van toepassing" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Toegewezen gebruiker" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Kortingscode" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Actiecodes" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1528,141 +1532,141 @@ msgstr "" "Er moet slechts één type korting worden gedefinieerd (bedrag of percentage)," " maar niet beide of geen van beide." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Promocode is al gebruikt" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Ongeldig kortingstype voor promocode {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Kortingspercentage voor de geselecteerde producten" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Kortingspercentage" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Geef deze promotie een unieke naam" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Naam promotie" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Promotie beschrijving" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Selecteer welke producten onder deze promotie vallen" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Meegeleverde producten" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promotie" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "De verkoper die dit product levert" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Geassocieerde verkoper" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Eindprijs voor de klant na winstmarges" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Verkoopprijs" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Het product dat bij deze voorraadvermelding hoort" -#: core/models.py:1101 +#: core/models.py:1106 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:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Aankoopprijs verkoper" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Beschikbare hoeveelheid van het product in voorraad" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Hoeveelheid op voorraad" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "Door de verkoper toegewezen SKU om het product te identificeren" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "Verkoper SKU" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Digitaal bestand gekoppeld aan deze voorraad indien van toepassing" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Digitaal bestand" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Voorraadboekingen" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Producten die de gebruiker als gewenst heeft gemarkeerd" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Gebruiker die eigenaar is van deze verlanglijst" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Eigenaar verlanglijstje" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Verlanglijst" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Downloaden" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Downloads" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "" "U kunt geen digitale activa downloaden voor een niet-afgeronde bestelling" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documentaire" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentaires" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Onopgelost" diff --git a/core/locale/pl_PL/LC_MESSAGES/django.mo b/core/locale/pl_PL/LC_MESSAGES/django.mo index ec775811d150ba6c1ac43188b1a9d8854d335bc7..395cf85dd9dcdfd1c9087feef673a49f6d5e42d3 100644 GIT binary patch delta 9125 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 T7#~~qP)zNeIfnuUcgy_`BtR2r diff --git a/core/locale/pl_PL/LC_MESSAGES/django.po b/core/locale/pl_PL/LC_MESSAGES/django.po index 19799561..13c575ee 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: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Obraz" msgid "images" msgstr "Obrazy" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stan magazynowy" @@ -91,7 +91,7 @@ msgstr "Stan magazynowy" msgid "stocks" msgstr "Akcje" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Akcje" msgid "price" msgstr "Cena" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Ocena" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Podstawowe informacje" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Ważne daty" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Tłumaczenia" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Zamów produkt" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Zamawianie produktów" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Czy biznes" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Konfiguracja" @@ -514,55 +514,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "Lista wszystkich produktów (widok prosty)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(dokładny) UUID produktu" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(ikony) Nazwa produktu" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(lista) Nazwy kategorii, wielkość liter nie ma znaczenia" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(dokładny) UUID kategorii" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(lista) Nazwy tagów, wielkość liter nie ma znaczenia" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Minimalna cena akcji" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Maksymalna cena akcji" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(dokładnie) Tylko aktywne produkty" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Nazwa marki" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Minimalna ilość zapasów" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(dokładny) Ślimak produktu" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(dokładnie) Cyfrowe vs. fizyczne" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -570,35 +570,35 @@ msgstr "" "Rozdzielana przecinkami lista pól do posortowania. Prefiks z `-` dla sortowania malejącego. \n" "**Dozwolone:** uuid, rating, name, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Pobieranie pojedynczego produktu (widok szczegółowy)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "UUID produktu lub Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Tworzenie produktu" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Przepisz istniejący produkt, zachowując nieedytowalne pola" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Aktualizacja niektórych pól istniejącego produktu z zachowaniem pól " "nieedytowalnych" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Usuń produkt" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Nie podano wyszukiwanego hasła." @@ -653,7 +653,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Nieprawidłowy typ pochodzi z metody order.buy(): {type(instance)!s}" @@ -842,7 +842,7 @@ msgstr "Promocodes" msgid "products on sale" msgstr "Produkty w sprzedaży" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promocje" @@ -858,11 +858,11 @@ msgstr "Sprzedawca" msgid "product" msgstr "Produkt" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Produkty z listy życzeń" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Listy życzeń" @@ -1008,8 +1008,8 @@ msgstr "Atrybut tej wartości" msgid "the specific product associated with this attribute's value" msgstr "Konkretny produkt powiązany z wartością tego atrybutu" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Produkt powiązany" @@ -1105,7 +1105,7 @@ msgstr "Opcjonalnie można powiązać ten produkt z marką" msgid "tags that help describe or group this product" msgstr "Tagi, które pomagają opisać lub pogrupować ten produkt" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Tagi produktu" @@ -1125,7 +1125,7 @@ msgstr "Wyraźna nazwa identyfikująca produkt" msgid "product name" msgstr "Nazwa produktu" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Dodaj szczegółowy opis produktu" @@ -1226,7 +1226,7 @@ msgstr "Aktualny status zamówienia w jego cyklu życia" msgid "order status" msgstr "Status zamówienia" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "Struktura JSON powiadomień do wyświetlenia użytkownikom, w interfejsie " @@ -1264,59 +1264,64 @@ msgstr "Identyfikator czytelny dla człowieka" msgid "order" msgstr "Zamówienie" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Nie można dodać nieaktywnych produktów do zamówienia" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} nie istnieje: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nie istnieje z zapytaniem <{query}>." -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Kod promocyjny nie istnieje" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Nieprawidłowa wartość siły" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Nie można kupić pustego zamówienia!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Niewystarczające środki do zrealizowania zamówienia" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1325,193 +1330,193 @@ msgstr "" "informacje: imię i nazwisko klienta, adres e-mail klienta, numer telefonu " "klienta." -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Nieprawidłowa metoda płatności" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "Nie można utworzyć zamówienia chwilowego bez podania adresu rozliczeniowego." -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Cena zakupu w momencie zamówienia" -#: core/models.py:785 +#: core/models.py:790 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:786 +#: core/models.py:791 msgid "internal comments" msgstr "Uwagi wewnętrzne" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Powiadomienia użytkownika" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "Reprezentacja JSON atrybutów tego elementu" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Zamówione atrybuty produktu" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Odniesienie do zamówienia nadrzędnego zawierającego ten produkt" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Zamówienie nadrzędne" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Konkretny produkt powiązany z tą linią zamówienia" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Ilość tego konkretnego produktu w zamówieniu" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Ilość produktu" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Aktualny status tego produktu w zamówieniu" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Status linii produktów" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Wewnętrzny identyfikator tagu produktu" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Nazwa tagu" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Przyjazna dla użytkownika nazwa etykiety produktu" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Wyświetlana nazwa znacznika" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Etykieta produktu" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" "Zapewnienie alternatywnego tekstu dla obrazu w celu ułatwienia dostępu" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Tekst alternatywny obrazu" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Prześlij plik obrazu dla tego produktu" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Obraz produktu" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Określa kolejność wyświetlania obrazów" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Priorytet wyświetlania" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Produkt, który przedstawia ten obraz" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Zdjęcia produktów" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Identyfikator kodu promocyjnego" -#: core/models.py:959 +#: core/models.py:964 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:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Stała kwota rabatu" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "Rabat procentowy stosowany w przypadku niewykorzystania stałej kwoty" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Rabat procentowy" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Znacznik czasu wygaśnięcia kodu promocyjnego" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Końcowy czas ważności" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Znacznik czasu, od którego ten kod promocyjny jest ważny" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Czas rozpoczęcia ważności" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Znacznik czasu użycia" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Użytkownik przypisany do tego kodu promocyjnego, jeśli dotyczy" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Przypisany użytkownik" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Kod promocyjny" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Kody promocyjne" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1519,140 +1524,140 @@ msgstr "" "Należy zdefiniować tylko jeden rodzaj rabatu (kwotowy lub procentowy), ale " "nie oba lub żaden z nich." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Kod promocyjny został już wykorzystany" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Nieprawidłowy typ rabatu dla kodu promocyjnego {self.uuid}." -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Rabat procentowy na wybrane produkty" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Procent rabatu" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Podaj unikalną nazwę tej promocji" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Nazwa promocji" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Opis promocji" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Wybierz produkty objęte promocją" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Dołączone produkty" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promocja" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Sprzedawca dostarczający ten produkt" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Powiązany sprzedawca" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Ostateczna cena dla klienta po uwzględnieniu marży" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Cena sprzedaży" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Produkt powiązany z tym wpisem magazynowym" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "Cena zapłacona sprzedawcy za ten produkt" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Cena zakupu przez sprzedawcę" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Dostępna ilość produktu w magazynie" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Ilość w magazynie" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "Jednostki SKU przypisane przez dostawcę w celu identyfikacji produktu" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU sprzedawcy" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Plik cyfrowy powiązany z tymi zapasami, jeśli dotyczy" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Plik cyfrowy" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Zapisy magazynowe" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Produkty, które użytkownik oznaczył jako poszukiwane" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Użytkownik posiadający tę listę życzeń" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Właściciel listy życzeń" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Lista życzeń" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Pobierz" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Pliki do pobrania" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "Nie można pobrać zasobu cyfrowego dla nieukończonego zamówienia." -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Film dokumentalny" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Filmy dokumentalne" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Nierozwiązany" diff --git a/core/locale/pt_BR/LC_MESSAGES/django.mo b/core/locale/pt_BR/LC_MESSAGES/django.mo index 6dc0c7700f379b490402589b529901491064364e..d2f011f15a901b7acfeab5b268dc010b792f96b5 100644 GIT binary patch delta 9106 zcmZwNd3?`TzQ^$+LXb!z2|+@BArgcngv7ozVh^##o{)$wmPqXU>}wH4Ybm9z){J3B z(S=buZK)1Qi#xRCs*B#1_IA0JPG@>w@83D*F@N0eV?KF)KIglg?>XoDP4qF_-uBz{ zj-U5NnEw{Tw!54$(HLFTn5KSMTdl@itY=JhyoB0+&*@*^mvl`(RjK`DM4DVtktl7}+kHsd` zy^vjIwrk&wdX|r|4&HH==b{nZ-^7wcvLg*^U>0U!0d~YAn1Mf|o}_hSW5Tcx&cj@6 zfL~w*^h-2`K{S<6BUb};d=spO9kDWIV+i**!%1}GNf?StP#xN&18~152LrlOu`7HX(hqK@B*>d=1Fb>BvH{Jh(L8U3lhN@DyqC--R3&_6*9X_aKV zit9RCp>EV4HJ4*h9VkWJXaO>KW(_h6<}K8e-gfmbsN>^PjA?~Q*cuDHBIQ>RbDWEva4D)IA7C}SjCw8aqK3F?s%?)zT`%6%$*Ajf#zxo+)AjzB zlI*470P2JRE$m#5K>lZn`Ju)6I%?<+U|YP4>UcdKQys`aE@&p9-kw)543A?3UO*4t zMy)0PG_3*VKZZn45{G>-4Ts?}%*LCj4m9KH!I+Mjn2CC#b*LwQ0W~taP}e(%+{>K8 zhWHS*24Z*$?N7jTz5lIAv}mRy>%{EDa6FGS@D}RR`WQQ41S>~39)Oy|kU@m)l-6b*Vz3o@FbDNo z%|SikLadEt&i&Yp`ZQ{)gWI|HKeC-2S`X?1$*3o9fqJ4|s1X^3HL)1g(Y3C98)^y; zAaAfafwSO0CO3$}v{B?uRXwclyp(6SYU( zFbCDq(WvuhBC}*xpcdUp)cKcDQ*{eA3P{rHPCSj;2tc|P_lY~ui9O{?PX4GQ5 zhPrTKC;J4QP#4NXou7qzfH9~Cn1*WiqB^n(^&Qxa+V4F?qMn^X9dHhHz%|qyedFq% zFp}E8vt6vwsN=h%K0t%8I_9FTHxo57OHfm`4RzcbsKt8%Io@l|kfCKwPhdWNiH)(#Gj@oJP!F&Mb^Inw!o8@eyNqdi|34?ug~J$U zt;R=}T7 z=RLuS7|@&XXWC3~Z`+WKRj6}NCyqs3cotT|Rj9XOBR+>Gu@L+Bu_JU0J5hgyI<9_} z{k5Ep@ze{kA?`(u$b~G%Ur$t}ubtD5*qFKi>tGos;6c>4{3i@ z2L|FE)S5Ve_3;b_;kT&kKE`CM;mx+MLndl2`=Lf)H8LA!Gd98-*Z?c_w;fDEJ<(7M z!9}PkDnmW_77WApF$%AuI{YK*yhv6k-yq}dK%$;6K;3vLYHrqJP27TdqJyZn;uz|< zi>N2~90M?LpfPzEj!9UGvG^)x;Azwp1`e`oBLeH`{jX0F&W=p1jKffKlaE@QyHShr zE7Z_?2HO$ogDt3Mq4xg)m*O{=iBpEyp+AaRW7n`bM(5by34O7N-v1ROn)Ab`xxRt= z##iJwNOg=w?N3Kd!5GXb$6~}<)VGG&A^tn+dl5O@eks$PeUT?Mh3LUG7=`<>hTi`( zBrIfe1J(0H-l4i!jAwBpw#4Bh`3u>P8uck&lxu&lZ$(YTIZVf2QB&9=&wf|hVj6X! zt9PN+$j9i_jUJQ8$T4bPf6=jFJ1B8F0XQER9SH5J=Y zYvvf%zB62{|otbpbC%IE?Cs1DS{s+fwJiq2ROhoU-` ziyDz)S8u=&>OB~QhcFo5^^)j|bRO07hp3@3<82*?8v5#}5lBMq?}EBfAGd!rCQ#3I z`*)){x*v6;Q>f!VL3QL7YKpx-xC25b*aKtGpB+i48>XU$wj26}9HXcwqTZ4fu6>X5 zFlr<|M2*ln)Ec;saaeJpeH#*y?}XQ6kp!?~0d~XX*b&d8Ucai7>{_Ug>QEZi!Jeog z9`D+hJGWsa+7DnAd=s1Dd#ES>3H6qgpRB24{@aphhzFpCYBH+l^H8tdYSa^*#5Q;u zD`UAL`y_#wMV*8ikp-wVu@&{&{Ry>(?z#2{s18<`!hN~F2`1466EFpvp}uHi@F4C+ zJxSlGb`cIkjnH%q#6y^kCy<40LZ;adRVgM?@4()82DK(4rrVKhgkBA4dy*K;Mt#wy zqo!mn>Pa@CF1#Q4$eC)z_J)&DBl9k5O?-%1cnhmy$_#s*4p@yk6Lr5FOvcGG7=QKf zMH+O&k5F@d5qscWY>p`<_IJTpR0sE>R_{q{h&Qk+29(+n>4U-4Ls1-mPAj9L4T5e2SXus5$n8cnqUXM!l9@FdVy~o@}_=KLHb{=c79MD(Z<3 zqo(L1Y=xiTD6BNs{s#zeA&Gjv2Q?>GP$yKFXXic$L#X3WBhmuZp-c?Lp{Nm>h?Z=$YOd%mxuUelOF7ix|5uqWzmC_)X{EYuS(!nU{>HMAF9?YDqG z*{M6A&R>IifCH$G96@#D&!`9Z4Ar4K7^V0BF^PHv-=5zE0?!pwI&cA@6}2-d=rs2g5Gz32B) zbNCo_!Dfr>lnusi)GM$7UO;u|XVhyOx!ATZaK3`N&sp@UN0&*G@Eg>V*IHu#OGpYf zr(TFd@DSF)%1iC)O>kzQo+!`N%bhPfPhvd#zrcZ5ewm%JoMnu^8eXMAJ%55NF=n~_ zBoD%L>M7V6U&BuLHMYh^E39KNjd~~Q_{*4yK`ZT=8Gsqo8&KD|?5wehq11sntL%X< z;b7{|QJ>7_tL*Zj zVH4^dsKx62h$N2Wp=*fRV27{=YDgDjJid)ud^b@&uUTea!xpF~ABVm1WmkWXiFx(b-m_2l0X{1b~}DX%~9}k_Jn>olzJov<6EdHI*skH&L+ENhM_uG z=IXOpm-;uXgmpLDPj&*+a0?RhR%r5=ZxiW1Zi&ciU= zhq}>mtcKUIHQq-}ZT$20Uq(r&4ws?MKabtGzxjnE6uZ1&|H(7}Q>aTZ8ecI_u-G%SbO^qpwricIn-@?ChJcu44Y-eRx$lB6%8O$$w1 zJ$GWTvk`57CG^j(QP>C1A_MWS?R&D{xvH8wFN>O4_}8|AY&9{9@b?{~`KOphp+!=K zh;}EFnqlNqaIp%ucEllHW`A^p0*=w}$GG;&IFab?uJfI17tFL7>)Q2pX#JT#6R|`s zcI2bRP{Ycr>)X0gk0ktEecUOciDF_G`?Zb2RYX^EX2YbA_a(-Wx5Xmj7xHZ48N$1W zhNoMh%OkNlQQht6|8K{Pq3vZtD|`=^Z!QjHjz!Ewn@ZHm#YpWUq)ylUL&3%FGn09uYymv0WQDi8vYY2y1Wk_BZ`Q* z9JiLpB|i6!KaB$kZM7}FpMP`tKn`3_Xq!fKAb-PG@n;qO>hg-Tmk_*6<~*^6Jd8*p z^jc1L$BBNlX{)CB|2r|AhA*%qp2kN+h&$+y{F1AmQcC+C ziUh1qd`;ewNF-m2`da1?O^IaMCTae!Q)v5u=t2CR7(x6m5yL@+xQ5{OiSHu?W()0m z@f)H$v6WieKPHTGLuhM(z0mtlek>t+(r_4`Zgr?V6n}CJ zgYYHVv@ORU@V|-Y$uo)C#6ju{gtn!`5Zbf_5!=b9xVj8y(>7Ayzupw7ZpRrK4-nd} z5UIp!_6;RAxMLR5R+l^l^N1ZpQ|kKoGqIDhR0+@l!FqA!v0c3CTLu7A|Jp>B0 zicp|3gxXfD+CZVjfeO`tB2*L*5uq(&`}zLPp|AeY`|`>AdCpzuo^$R^^yNz@d^W$~ zJ{_yoVg;F*iuo(NMXGF^zB&9`!NiBSRZ#gPob`R8S8L=bB`pPhCt3L!Wis?6EO#WgL;AoSPKK188ZtTU@UGy zKYR-rJo6rE#6ChD{|$!VBlO3bi3CPqIQKVANrEv8>tGLeK#6Og;arN<*}oOlpLp8wVza0=Da_fa>x>gwBAh1w+9C#;IP zKy3`fHdqaFQBPQe0oV`Kfe~*1D%5p1xq5dJp< zf+W-vrK5&A7j^tVREJ7X*PV*$_%gSDE&5XLL_O%0Zo z+p%cW5T>DSl!*+E>57cHnSxqNyIlPS>iDm)4c^4I7@J}{FxW$)4opCGU>>Ri8=Qx* zCiNNA$Xr4V@h#L)K0wX64->8qrDHmFMqO_@2IF$n2yI7A&1$9%~T z-5`vsYK|LV7G|S5G7m#=E$VgLgBs#LyY>%I*Za!Vw@}ynH#SB8G-Fz08t&EmUrM4A zLR#6mj70u1Dg4ml9ElpbQq06XsGeUzb-;(m)dicP-kzaY3uj;$F2`uxg<4B*qt?LZ z7^3(8OOiqw?%@FJoWU!I+fg0(4r}0#n1{aHO;41Mdh$M~k$D<5GGmZSnKDekBd9g- zx!ZpY`NurqN21>U7Cav7!VE;s*)j~r9jH(0G3xL%fgC7|y(CNL!;u zpgl%nk+TH5P|rtA^;zeIOvYbBTS0>^a0~V1cTrE|-`Pv7 zH50Kv?m~^kL)4;c*}?9A8a1WMP}g76f$`Ve?V&*zK7#7d+o;#+eXNHSs3&@ex?wo; zp^nx^o!<(X9g~AvbaPPWuSHGO4%BsCL#>5!=Xno_=KNFCqPU4k*rb#F<n`O@rL_I(>>H(5b*X@AnNDtI^U=V8m^Qew_%1Cs;Qq%z(QFHW)s}Exx z>bEfwFQJaFl5Iagp;()`0qTOSP$QFtnzCZlhiW`(@y6>_a|g<|szv zb<}FD+Sv|m3TkncU_+dRBXBD=L-T|k;zZN~bVVKC1Cwz$YUsV_f9ihq2V>T>S$^P>1K*8>e6|>Oy3f*@fNkI!0qko}I!TsF5Cp-uHhR zNh%Gyofl9~RFz)EV@uR39)N0}k6LU8u_b=(>Zq>vI=xX(ybyVj%u(0=J#wgtp;rv9 zDMgPO4v=KwkH`Wy8Bf}JGWt>njs3(ce=j(^5sKvDswfMH9A09@X zcO0wWyU47Wv-ym_8fq5UMG}rWu@UOR=~xZ(FbTWkTAYKUF}To<&~(hA-ibQy3v7-x zi|p@+_Lx9D95o`#Q4dsJ#QevSJffi)#&ow|xFU?F9)tRpuR~q%3^u_B*dFUWWuLG= z22c-1t%*{M!37wIuVQ^XhAr?T^haM0FSq8h23E%|$Sjzi*c7*+I`|%{gEuh_>-4lA zo{p#~DndPZFRXz@*ntC#-1AZfHhfOA zrvO8+7{jn+1mmy8QAR^8T!fLh1$E+4ci?H%i50HCgTd5(BkkG=M@>OAYOQ3UhIlOI z;(X^B)QAO-a=)ZTG5+d6F%5Az1pRQ4J75K>r+Y96PoSpYPgn&nqdImSH6s6Tb#1;* zHL2rK?|*C5>d!%ahJ!?Cf zin>uA>i9mWj*Ldl{WQ0KgVVE@#FrgMP&Yh*8rpN{9deAKzJr>Yz!KXY?`(@2iG0)u z^+c_KA=m_$V`Dsw$@mdg#mdile;Ij907)krdZAvsmr!frRaA%G#QJz1HN>}FdqAn( z-w>v-UU$>g5C(6ZkSb+Yx2=ydu zun3Q!Mx^psd*KGC*DeFKhQ_+~NvIAkL)~~C>Usw-h5MW1BpvW;{58gnvrlpXwTiEx zM(618^huz`LlC$(d-^L_QW#kH#Q8hPuu>7=mX}H?F`Ico)^d#*^%EMUxnR&3RuM zy5SgXiN`P-Z=gDuIN7e=Tuh)Ifw{N>H6kBk4ZMu%$ZZV6pHL$kGR6JA?kt?uszO2UFdhH4nD**OrB;PhN;vWQ2WbKbN&$Z0KU`h;%(r} z#ICgW^N?uO?n0fgA8X-J)N5Iep?D7UWM8=b-=RA0GsAYY8S07KqNb<_+h89Yge$Qv z-a>Ueex{ug&p;BLungf+z9HQvK)Y`(z$T|W-B zdJj5pU8cb_5y{dxnF{bxEZx}-bL1@xrACX#mn5^epr=y0cx$R@VJIuSVF_A zs2hYXw|_W9Vk~t$YK;`4UZ2sJhSPB~?nj-Ux5BQGLzqQ<1)F1|m3FZfVH4`vuJ-IA z(UAWYHKbKn*}3b8T6`l>ug%M-*YG52=x$;GCakvg6nvKYF#2KS8v6jzsE#LL9CpC~ z9B11-W+sW|dL0Jh$JigQVh!xD)=p6Ywx`~WS~FKr9SncT*4?oI^#ZJhd$0o@z)1WS zn_`u9cH~kpL+}3xk|)`*71i_W7=$-bQ}Hj<5LQ}mU(aOJjj}NWhhSTrh??8|I24bd zIvl>ip5F_*P|rn8VL3M9{^lY{3O+==X3aO+3wJ|3!9dK%&DaaCp`N_$COdT#QTz8{ zH@uI`j>%$S^u+U+fH7O_FP#ExMZF&N-=EDH5(i{75t+c&p84L=mBlg{|jjr#msosotI;im9K$0xU-c=)c=- zvR7Oc?9MBsX14yjEg)M=OeHG2V|2&o$*W;?-9O6hpf>%<$KqTSY?;I%Z)Shw!3d6N zjamcR{0Y5!UEFnUsnKmL0W-|Ck9KXp#b}}~?ZefZe-q7!<%G5zc05h^+R~hKiYQ_N zv7Pia#5WC6s7PTkpQ1`_W{27lEPm!~E%yaylVhe9eb@CU9 zWU5bz&e})34*tsB*3;$JU40q#x@yyh=>#!`n89&NiNVArYHfOpv_-h}=Pf?*{$wWy zt{}8MPjnzZ?5+6sK78nMKiVe|o2kzdOUOfrBqD=)ygN>Gr%ju_7yly0Q~wP+YChg2 zxlhz^2mPA-E8^X;_u`giDu+Wu@+HGG$)d2 zdycqBuI-ORSIz&cBm;?iL<0^Og-Zy1!O{qA>uBGDH;698Mrv(8S-d~5^7Cb)57EZk z!Y7&I2DtneSd)4%F2^T`WtBYqmu(sbP}C+KZ^s@d&b9xuFP*k8iAuD+gWnK+$Undt zgtj$As5j#mk~=pGTf1DlCK0E&zjy2IY>Rxpz5luu%E3wG6>i^YT;}pOFxcfH&gE@5 zCxHAdq6zs>cf&M%lD0?03q&{S-{9l>n|d@fq~Rc;tvB&9ZQADJ9sHVDPo7Ie5C^Ew z5!&VveQDDcNNgq_>*`fFjkc$WeDapA{XN}(KaJWxB3crQ*{T1`w$dFmhqn6UEpQ02 zg=kLQ7=IwP5!!~h<7bnv@V3}LUVUjlN}Wm!bjReAKOh1%|9LdVx*a|=t|703b6i_p z@`c3z+Y&jZKRZ4owvksQ#<}z2u>HdE7UfT@S)y_ zza#!ZXe*>GlekGf0Vm@Tq8j-%)YhIn97}N})+E}J{}QL7wprMa@N9AoYRn@3LX4zs zCVo$7i>Ce#yLl`7$BNPm#3I)wT5;S4VmR?D>YhZlcDU_H+O^ffGMjq5|KrIZiWl6@ zPIia)=Um$QxjLP^smsSXW7I~xMxBA$Mp(Q*|H{uNi0MRc_J54C@mV60-22(fe*IkI SNWa%360Wv+z17gcng0PAmJw?J diff --git a/core/locale/pt_BR/LC_MESSAGES/django.po b/core/locale/pt_BR/LC_MESSAGES/django.po index 335ea00d..bebac405 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: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Imagem" msgid "images" msgstr "Imagens" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Estoque" @@ -91,7 +91,7 @@ msgstr "Estoque" msgid "stocks" msgstr "Ações" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Ações" msgid "price" msgstr "Preço" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Avaliação do produto" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Informações básicas" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Datas importantes" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Traduções" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Pedido de produto" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Solicitar produtos" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "É um negócio" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Configuração" @@ -506,56 +506,56 @@ msgstr "" msgid "list all products (simple view)" msgstr "Listar todos os produtos (visualização simples)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "UUID (exato) do produto" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Nome do produto" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "" "(lista) Nomes de categorias, sem distinção entre maiúsculas e minúsculas" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(exato) UUID da categoria" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(lista) Nomes de tags, sem distinção entre maiúsculas e minúsculas" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Preço mínimo das ações" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Preço máximo da ação" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(exato) Somente produtos ativos" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Nome da marca" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Quantidade mínima em estoque" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(exato) Slug do produto" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(exato) Digital vs. físico" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -563,35 +563,35 @@ msgstr "" "Lista de campos separada por vírgulas para classificação. Prefixe com `-` para classificação decrescente. \n" "**Permitido:** uuid, classificação, nome, slug, criado, modificado, preço, aleatório" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Recuperar um único produto (visualização detalhada)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "UUID ou Slug do produto" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Criar um produto" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Reescrever um produto existente, preservando os campos não editáveis" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Atualizar alguns campos de um produto existente, preservando os campos não " "editáveis" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Excluir um produto" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Nenhum termo de pesquisa foi fornecido." @@ -646,7 +646,7 @@ 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:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "O tipo errado veio do método order.buy(): {type(instance)!s}" @@ -834,7 +834,7 @@ msgstr "Códigos promocionais" msgid "products on sale" msgstr "Produtos à venda" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promoções" @@ -850,11 +850,11 @@ msgstr "Vendor" msgid "product" msgstr "Produto" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Produtos da lista de desejos" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Listas de desejos" @@ -1001,8 +1001,8 @@ msgstr "Atributo desse valor" msgid "the specific product associated with this attribute's value" msgstr "O produto específico associado ao valor desse atributo" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Produto associado" @@ -1098,7 +1098,7 @@ msgstr "Opcionalmente, associe esse produto a uma marca" msgid "tags that help describe or group this product" msgstr "Tags que ajudam a descrever ou agrupar este produto" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Etiquetas do produto" @@ -1118,7 +1118,7 @@ msgstr "Fornecer um nome de identificação claro para o produto" msgid "product name" msgstr "Nome do produto" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Adicione uma descrição detalhada do produto" @@ -1220,7 +1220,7 @@ msgstr "Status atual do pedido em seu ciclo de vida" msgid "order status" msgstr "Status do pedido" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "Estrutura JSON de notificações a serem exibidas aos usuários; na interface " @@ -1258,56 +1258,60 @@ msgstr "ID legível por humanos" msgid "order" msgstr "Pedido" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Não é possível adicionar produtos inativos ao pedido" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} não existe: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} não existe com a consulta <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "O código promocional não existe" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Valor de força inválido" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Você não pode comprar um pedido vazio!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Fundos insuficientes para concluir o pedido" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1315,194 +1319,194 @@ 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:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Método de pagamento inválido" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "não é possível criar um pedido de compra sem fornecer um endereço de " "cobrança" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Preço de compra no momento do pedido" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "" "Comentários internos para administradores sobre este produto encomendado" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Comentários internos" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Notificações do usuário" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "Representação JSON dos atributos desse item" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Atributos ordenados do produto" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Referência ao pedido pai que contém esse produto" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Ordem dos pais" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "O produto específico associado a essa linha de pedido" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Quantidade desse produto específico no pedido" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Quantidade do produto" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Status atual desse produto no pedido" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Status da linha de produtos" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Identificador de tag interno para a tag do produto" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Nome da etiqueta" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Nome de fácil utilização para a etiqueta do produto" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Nome de exibição da tag" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Etiqueta do produto" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" "Forneça um texto alternativo para a imagem para fins de acessibilidade" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Texto alternativo da imagem" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Faça o upload do arquivo de imagem para este produto" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Imagem do produto" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Determina a ordem em que as imagens são exibidas" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Prioridade de exibição" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "O produto que esta imagem representa" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Imagens do produto" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Identificador de código promocional" -#: core/models.py:959 +#: core/models.py:964 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:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Valor do desconto fixo" -#: core/models.py:966 +#: core/models.py:971 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:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Desconto percentual" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Registro de data e hora em que o código promocional expira" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Tempo de validade final" -#: core/models.py:978 +#: core/models.py:983 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:979 +#: core/models.py:984 msgid "start validity time" msgstr "Hora de início da validade" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Registro de data e hora de uso" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Usuário atribuído a esse código promocional, se aplicável" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Usuário atribuído" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Código promocional" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Códigos promocionais" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1510,142 +1514,142 @@ msgstr "" "Apenas um tipo de desconto deve ser definido (valor ou porcentagem), mas não" " ambos ou nenhum." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "O código promocional já foi usado" -#: core/models.py:1033 +#: core/models.py:1038 #, 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:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Desconto percentual para os produtos selecionados" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Porcentagem de desconto" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Forneça um nome exclusivo para essa promoção" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Nome da promoção" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Descrição da promoção" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Selecione quais produtos estão incluídos nessa promoção" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Produtos incluídos" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promoção" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "O fornecedor que fornece esse estoque de produtos" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Fornecedor associado" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Preço final para o cliente após as marcações" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Preço de venda" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "O produto associado a essa entrada em estoque" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "O preço pago ao fornecedor por esse produto" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Preço de compra do fornecedor" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Quantidade disponível do produto em estoque" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Quantidade em estoque" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuído pelo fornecedor para identificar o produto" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU do fornecedor" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Arquivo digital associado a esse estoque, se aplicável" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Arquivo digital" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Entradas de estoque" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Produtos que o usuário marcou como desejados" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Usuário que possui esta lista de desejos" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Proprietário da lista de desejos" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Lista de desejos" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Baixar" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Downloads" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "" "Não é possível fazer download de um ativo digital para um pedido não " "concluído" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documentário" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentários" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Não resolvido" diff --git a/core/locale/ro_RO/LC_MESSAGES/django.mo b/core/locale/ro_RO/LC_MESSAGES/django.mo index 170b5996bcd0821692854c03a52d871befe430b2..85116c5320fce6f928536decf9aeaec1141c5a8f 100644 GIT binary patch delta 9131 zcmZwNd3?`TzQ^%{*b_?<5=8S0A|Zq%Btl{-{^&-1*~vAM?rcbI$jCzu&WczdyZ?d+%t; zU*9R|yB-{{&TwoiVN3)@1R2w~B-T`|F(214rW#&Eo&UxeP}i7H%2Cc_tVKB!Yv3ph z#}_dKH(?C!MQ&j(Bkg?V5y@IALh5ld+=T~98gmx)fVo`N0M}uCJb?*#8_QvMtUVuv zjVNa#r_3~0zYR5(vsfFyc9!C%p*-J2k%Vy~8LML!W}z3`;M>>%e?pBUwV^S=*d1qL z4o2e_SQ<;l8N(!+a;TZBj%wcst7020kJ(t6=bJ$!dhl4Rg7Z)vTB8QI+tnX+p2G^% zUqf~14)SdC*wx1{4T+Q!Q8VR5o!@}E-=DB7eu6%&#Z?mZ{E2H&sb{3j9Y62RU%~*&H{+Rqt;si3XzCxKrnEv6 zyNjQ5wm?0o7iul@P#q{nJ!m#Ed1fiH3g!@MNpHFGFR1qQn;O#s<1rOS`AF1(H?Rus zM|I#d>NWbz`6E`Q9LR#I0}-exZi1T1RMeVxKy_#;Hpd01`yIh5cmXv-H&9FC`;J7f z-6Pae)Z#9rrXK16eNk(igKcp>sw1bdDqcdpmbXz;9F%11Ls9pu@5)V3_iKj@FcVYs z{uh&Mr(zH4g5J&SS`J43XA1eF&AAgbb$hTC-bQu24#QLjIv_VRV^MFkK>aQ8}>f*F{B8qspp$Ty&7W-ID`dy!|E zlNgIXqxL`~qtN*nOws$FN}^3O3E3xR3x?o%td3uzKCKV2HHNZt^x)p8H5}s1M~%1` z>9bjkjqwCBx#l}8g;6bShoaG^&5%W+2Mk7)r(p~(bnZn>^=0Qn)Tgv2>kx@8(1ZO^ zuhn$a2_OgO^EM8^Td0{xPq&+{2z7odYDv$hGyi(Pr&MU|ZliAeGit2^m~XvKAsB%k)QHki z5A2WX=rGjvQ;=0M3sIZy1nT-rsHOT6b)WB0d!d4_jZK14Bdm$+6BCb(aU|-;XDwty6ejK zF^qCRJG)sUQ0+UTK0tl28s?zxHw85_^H58+5!LQ3)aE^gwD+0!Nz{{TuE9OzV`mjY-P#2;wS}n7wHqVx7>>Ye*bv)4Z>M-XY5+@7?bl#DZbvQMB}~@)|2c_n9Lzjx zcV?nSvIg~l-(em6(0LD|DOc`j>ziW@%KcGmTZp}JCDPQ~!Y&w_VFy%*TEaD0h3A`H zBysphOu(<5Vf02L>Vh#?gbnaDSAPc8@gFb|8+NwkA*lPTM~(OcuW|7G6em_(#-rVeC-8LB`jbL_MF4dhmSI+N{8ET!$LbUesH01l8_i z)CfMuvRLs2V{$PBAvN^kJGdA-V#gt@X(@j7uomU5Id%z-U~|fMk$q)6xpt~2VI1WdsQd45 z<(sG_s+7n4dq~nr@15%%>=Le1P6 z)E@f*wbTz#OI^{+{8u8W=C$v6J=A7u?#k(?k!GPT9D{nm9MrDgfYos)2IFzmCcB7r z@G9zUc!HrAH`12dqV`h3NajC@WHS|dz(=SK+`?4+7E5FFDEpu|)PvfiI^G9$-3Tm$ z(@-7qVHB=+<-=Ho@<*tV{}pxpT{YAiJwo+7dbDj2?`(m3Kzpo;eO>)%S1!aF)Gt6y z^;Rs4AEF+35rgn1>Ve<8`d`sQ*;ggszTXL`hUuu0WTGD23-#cUs41L=wQ)HS2`ZlN~9FOrl-z+34N5ui`jK{GHmK|%SG8^^a(Wrlb%tjBc zLrw8PSO1ywd(;5RjkEWyj7gNkQG2Evrr=-<(fhxaL~FJSE8+>PfPco0c-hrQjJIF1 zSPZ0oJjUS+mC1n(7?n+hax|Z0Y|Hjc)xa2R%j{@-}up}-M$0$T{wv`_yuNQz!bZ5nW+2qb$YQH2BW?Y-LVNSLf!C?^Ny>pG2Nc;f&rYL zj_Sx9)KaeXx#Ugcvu@5}d5oQ5*E|t5b*)fqmWefRFoxk2S6+dQDepo}{bdZro2aFH zfXVn22VnD=cA&nMBq>z9hq}QN)b5O%WpB_7_24e3DIJKxnD6Rmp=M|~*1`j*2VO*V z^fRoEKVk~CbtD0+VkcKW08=Rs$40mX z6Ywmy!N=GT)8^Upqi`JMwb&d>%(v%LP94w2=89N-}Jr{WsllOrm@TBQau;EvI1` z<%!q|_h2&q&FNWe|83U~b^TK8j>oYB1}?F`E!n6g+T{Fn32Uf^flF<}ftW-2b?l91 znH~8HsGh&&tnjiupNHkBKZshI6BvSzP$LdnZp$r@)iK>rd*TAt!5co30Fsg`?1{2i zmU1`_LJw*W%tEc%3XH{9QA_bIR>CXT8t>qLVa!T?nD8v7V8>PVH)S>^Qa*)^(f2cn zHc`FRwqak?ny+x>)2IhN#zq+ZitTwXOrTthy5UaL)Lz9H3|V78G_9~S<#nhJ(`NMG zPGp9B<^vLq>^|y)@dTg8u(ft32H^n8!?6M$!@l?dY7a!NvmNP+Eh#TX4d4`3$498^ zs;syFZCDGRqdXX!^L#UtB#w%Gs1aSm?pS$)?Z6PMLfMO2>nRwGJ`BO_uKY(=zJZ#F z`>266de#0sC!;p;YHWZPFq`L_ha^?8>qfil2V*nJvruch4|V<|w!u#@2ZJ}+nVO7R zfL;FUfQ(4NLODT#}J*}eg5w11zXDuclD!Hq4j@Yd1hYt6LhH|Jnx^DEh>_&2a6It~c{ZW9%r}>cXU8a) zhhZX7&7J7=A8qoe(+5T$scF>L!{Nj%;ux`+x>i^h^_I-UK;pOLK}0$cPPreBDZ%)E zB{@uFQ>kMtF~#L7S0rCRXlGv`o+mFsyiHyKpB=qj{*9~nE0%G&Ugsmkcwz?amJvC` z=l=Pp@&!UiO^g5UXD)w%hARji6N%R3Z~04ngz&M;%TQlL@b;PW#8UELBA!U0Jjt~a zJ*m@CRqOvxViFZ!U>iJx4~WXH(VOI76ZyomV~0x?;5K3{ZATOLUHyFW6E5dNX{Hc- zSk0HjYT_iJ!}l5uhY_oZ>BMy^_0cJ%vmECv{!gjC0XoXkt~6fsm;UchG4*dyjKONe z9r89r9QiT~Ci)YNi6+#I)%sthpyM>rh4^n`F!8@cB#lPlQi9(p|5p*rI_kIMU7|Db zDrFr{EdKv?_=@~>qA!u^>L=4~kjsCARZ1}bIV8(D(SdlGI7N97Rwtevhn^+QHUDug znYvp8_zRIl zEaBV$Vx?;{hq~v;n_@1pnP^P8F8)MpA#~)r_Or=X_-pL%erf6tQcffWYyEYE5)X+W zPIe;dyNgRw_X>G9&T(}$$QKd+-_eLR137Vt*g{^8nBcC9#n#j(;3wEc^?LpylHGWd zXiMG*#}V2a%~8i>q7>y<@i_5_(2+%58u1-@Ar|8SqCEL+)R9gehU0K0Rwi1K??m5J z5*@S9Lu_bhP#VwSQiuZh$K%lQ(qv1ZO?f5x=LLf;zkw|KE@K+ku!) z^x^#f=%t)Zl26p~H=&37kJYJJx~ZplvbWGPzIbwxXLRlquV+HRxas`ydM0`cM&uWa z@=PckL4({PPp+pZf4q19Ut-Fq_Uu#ODK5$%mp>!7XhNZSkn2@werSwuvniP$2MMFa_gh&_thx2QD|C9Qq?qV}x>MeRj@miDKu zwRGC5jzQ~JlrCmUTcxEj9j(?(b(z=udyaX`AHVzP=llGebI+Z@-ZeTO0~wk6K6~~otapHSy%)6VkDMe zC@#f%xE1-TIgPaQnA;?4sqn31%wxC#5BnH%9Cd>Ue5(O2z`A$V7{b<_wRU^NVEXv_?Z!32B( z%i}x9vN$L7}Uk=3I)EIKK(ip_h<)uBSvbtj`bzRaC3ML){hQ3Ktb%=~NWk5Zv2J%if4e{=qfx>0ar z+p$>G6sDtYl!Z)=>4?m_nS|O)J6!n~s{Pm449l=NCZyO74E2zx10|>q%tLkHdFQKG zmGU{%%v?oH@mfErOiww;k^jHH}`>S!ld-xsw6MaYwC zp2q&T12q#5QJXHUr9D3gwWP~X*I(U|`PbU*qCyuwgzC_{sK@CdM&mWqh#sPD7{Pj| zqqR`qZ-T6j$wh6tS*Y)qqLykK>N@*Td*O`pf`>$F{wZoxlwlIqX>EUedZIStdent) zqek#M>Oy`w_WMDo0mPyPkc_%+OH@aCpxy&RQ0K>^I_8;8q6SM*4c4R9XpbwuhSe#* zi-~v@)xJU-`vMBZaLO^L3pPQ`Ob%+v`l4P`6HuFX2CDr6q$3`)$u-!Ayv)pDjKy21 z-Rj@gPHhTma}{E3oPi^76E;NC&Q5V6Y5*Nk?R#J{4o59rDQa(Q#AbT_FOX<=2IShF z^+4TVG{)f~=RQoJeBPCR#2S<%+S?naU@ywukW*#{cEVd2iz#__345SsdK7w}|0yJ? zRP1zKL5;|tUe&`i)Gi)?s-KVAYzHt6zjfuB9qo0VK#h1I@*tVRuKpg<)Wp*(Cf5|9 zM-{J-byN0R22X+*->jSP45It6+L!1Kf=2;AvC`%djq1?`dB= ztx!vpj~aO|tcG*3Cay(w_*K;Rt{|@%^DAm;JXvg6-M9^EDY~Mb+g_*<6{DWlsi<}< zQ6t!h{&*IL;YCcw^e60Z#*>&!c|K|h&tet4gxWh_VyK>fzutB#B2jA-huWP(P@8c( zYU;0{W+bqWUAqj_`LXyc?!i24)Yne^GpJ3r9@FqDHpR;Q?DcZ7p`QN|60P-S)I0t? z49Dx<20Rt0C5YvhrC&L2f@-&IfL-h37)|*ys{S5o>VpQ__eg!zh&y5|7NPdSa?IlX zW*><*(=AlPc%G#cBB}08LRh zY=xDvJL-mmU41deQl5o@xE0mTvyVh0IflCN+o&6Vgqp&esNMPt#$aTjt!mF5!KVn6U8_N@+=Rc986BQFtQ~4I^##gX9-oaS(DY8=>kE(C) z9E=*kB-DjxqSkl;YR|lZnRpg8z;ea*KH(Us=f4q2B~CQM_SnvQ!k8tPOL-jz;Z;n; zZ;*G12_0ugR)o=%=c8UQJ5U|^)SbVM>exR~11$HHy`^AYl3nB)oe*KG|pru-)I>M&)f8+IzOd!qm~10|S%3(!-WWIu^| z{61=GFX1S>gJZDA)BLjGarDQiXY7UJun*KJ-=Qm?j+~quk$&}y2Cio*(!TJ-K z|4@?5iTvD*b=Xxc6;a~`(8-GdXzh19+se%?ilKVr<|8Cobs3079U^=wwP@H zTT>BgCe0MqKLaaFv1^iz-WyPxT%dQk6&X!+6w`rC}TFh??r9n2#s004vS5Q(1)i z{zBBqm!rPF2DP{LqB`^^R7WnOI&v4o_5Aw~s)$65JP9@8R;VxbK<(-=7=;s@%di>c zmr(7mqrU$G#-i^Wd)+#y8EcNUa2V=-9t@zZSxcfGZ^aNigxV9Qu{mDAMp$XC{rf%> zTT?E?hPW4X{xTM0xp{W2pF*AAg}UB{sE&Sy+N@>hQBR_uwf|y}irOU8a4;S~ZMw?y z?W;Gz*#R}8LRVhxJm|cFy72?-i*XB>MVyX9@B?gsi3^$kbduf+?Vn0ZQ02Xtjh|x{ zMlG_txsP)NrcwVMs{I4(hKY;qrkjQxDZhnUBL5}U98|k$n2Uc|!u%JI1TD3H>5M~- z{3NR9wU=3^U@yuaVnvK!ZkMJJhEg7d8u4^j-i@q=c>}d4vR2qXP`aWY752s#aV_#_o6P6z^Zh!ur+f!BQz@(L^FAC? zDX&Jo2Rx@pwB`?8Me1sM!$NFCeJRG_+n9=9p)MF!YNxaV)}uTJ^`hB><D)7>d=_+j3o0xhrau z6`)485eMK-)F%EN8(`K3`xK1C5Xwifwx0j9Bu(%(YHedS+6GCe=e#u*pa(TmUtk*6 zdBHx%eNk(@2(_!vBdcJlZQ>UdccZ5M9(Kj(&2}aV(UVTaHWIxMK0>Xz?-siUQc!E# zA8X-U)P=U;V|WhBp^j*xzALCRQRJL9-w{6%YR~Jy{Ef&bbTF$LKPTN6D?7F0&k=no z55}%|23djs9DgU<<4VEqds;@e!+(wiWQ&Q(gs*F(JB}x>h?R8zn(hQ;)1Q1C&QXCQ zi+I(W*^fLJL7Pm}rqZD`FC;p+>)chPJJ@UHNmoDG)t$gtB9i*y>dha7rj>Vv_sHeM zAVMz+9mg%+&zgLe5L-B}V=yivwC*ggX-u9^j3jS?#l*kJA1B%p9?Fl7QRKS6i6BWO z!rYl2|J7(1bvp<>8B?f_$0vyy#GAwm)V07ktb@}rkl0CHnaC!pQ|^O>_&XjY9w+DE z`R8+zEqH4xkv~f$Q~H!>t8>Ib2vF{ho-V)T%Ga@i%eBkjAc~1;v|CCHC9b;jy__}N z{__?;d32J7D+nFqiI(KAc}x6Y;6s;}r~Vm&r_uXo`x5dHB8g~9-2~T8bf->-p8H>j z36%eet+XD0Ci$7D;u`%g`Pal4;?c3&CC}nEVhwFa6F<26dE{@od<{+_^bYufSVg=| z=-5QNA;cWDc@}*df z=u7CGl1$xL;xlp`r-+VP|GgvwiTgwh4MyP-f*&sLZ#$T^)bGOEL5KcTgjyy`7rT=vJ=#&G>0|-_5~Hm+RCs#7XY&J-R!aBR>P)KbJyjoJ4-jojZ%mTz(9L zT`uanycypKB!7pfLq5#iFdaKn_Zu;n=tTK-d~|;kO+{@g4iGw?AhuGcV?O=^za`d@ zwgNb8?RWr925L*;7n z>Nv~QMUpQh{=XxUHvKvA5wV%vpLoiBuO7CfJ_RpgM_0cP_fh_mXszczk)(*2P2L1` zJWcpeUXOnw{z>TQMqL(BMqYvw@eomw{3hziCXc`(T!~eQ=HxHoWYjSOYZIOgu0oYL z#QzZ^shf`X2pzGMzsFAAlKs~)rB{eWu1++e-Sfn7;(sXjB--eNJ33RZqZ-b(smJ?& zJQ+e^t~=S\n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Imagine" msgid "images" msgstr "Imagini" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Stoc" @@ -91,7 +91,7 @@ msgstr "Stoc" msgid "stocks" msgstr "Stocuri" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Stocuri" msgid "price" msgstr "Preț" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Evaluarea produsului" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Informații de bază" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Date importante" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Traduceri" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Comanda Produs" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Comandați produse" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Este o afacere" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Configurare" @@ -515,55 +515,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "Listează toate produsele (vizualizare simplă)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(exact) UUID al produsului" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(icontains) Denumirea produsului" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(listă) Numele categoriilor, fără deosebire de majuscule" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(exact) UUID al categoriei" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(listă) Nume de etichete, fără diferențiere de majuscule" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Prețul minim al acțiunilor" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Prețul maxim al acțiunilor" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(exact) Numai produse active" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Denumire comercială" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Cantitatea minimă de stoc" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(exact) Limbajul produsului" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(exact) Digital vs. fizic" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -571,36 +571,36 @@ msgstr "" "Lista de câmpuri separate prin virgulă după care se face sortarea. Prefixați cu `-` pentru descrescător. \n" "**Autorizate:** uuid, rating, nume, slug, creat, modificat, preț, aleatoriu" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Recuperarea unui singur produs (vedere detaliată)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "UUID sau Slug al produsului" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Creați un produs" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "" "Rescrierea unui produs existent, păstrând câmpurile care nu pot fi editate" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Actualizarea unor câmpuri ale unui produs existent, păstrând câmpurile " "needitabile" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Ștergeți un produs" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Nu a fost furnizat niciun termen de căutare." @@ -656,7 +656,7 @@ msgstr "" "Vă rugăm să furnizați fie order_uuid sau order_hr_id - se exclud reciproc!" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Metoda order.buy() a generat un tip greșit: {type(instance)!s}" @@ -847,7 +847,7 @@ msgstr "Coduri promoționale" msgid "products on sale" msgstr "Produse scoase la vânzare" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Promoții" @@ -863,11 +863,11 @@ msgstr "Furnizor" msgid "product" msgstr "Produs" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Produse dorite" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Liste de dorințe" @@ -1015,8 +1015,8 @@ msgstr "Atributul acestei valori" msgid "the specific product associated with this attribute's value" msgstr "Produsul specific asociat cu valoarea acestui atribut" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Produs asociat" @@ -1113,7 +1113,7 @@ msgstr "Opțional, asociați acest produs cu un brand" msgid "tags that help describe or group this product" msgstr "Etichete care ajută la descrierea sau gruparea acestui produs" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Etichete de produs" @@ -1133,7 +1133,7 @@ msgstr "Furnizați o denumire clară de identificare a produsului" msgid "product name" msgstr "Denumirea produsului" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Adăugați o descriere detaliată a produsului" @@ -1236,7 +1236,7 @@ msgstr "Stadiul actual al comenzii în ciclul său de viață" msgid "order status" msgstr "Stadiul comenzii" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "Structura JSON a notificărilor care urmează să fie afișate utilizatorilor, " @@ -1274,57 +1274,62 @@ msgstr "ID lizibil de către om" msgid "order" msgstr "Comandă" -#: core/models.py:536 +#: core/models.py:517 +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:541 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:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Nu puteți adăuga produse inactive la comandă" -#: core/models.py:558 +#: core/models.py:563 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:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} nu există: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 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:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} nu există cu interogarea <{query}>" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Codul promoțional nu există" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 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:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Valoare forță invalidă" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Nu puteți achiziționa o comandă goală!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Insuficiența fondurilor pentru finalizarea comenzii" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1332,191 +1337,191 @@ 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:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Metodă de plată invalidă" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "nu puteți crea o comandă momental fără a furniza o adresă de facturare" -#: core/models.py:779 +#: core/models.py:784 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:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Prețul de achiziție la momentul comenzii" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "" "Comentarii interne pentru administratori cu privire la acest produs comandat" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Observații interne" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Notificări pentru utilizatori" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "Reprezentarea JSON a atributelor acestui element" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Atribute de produs ordonate" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Trimitere la comanda mamă care conține acest produs" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Ordinul părinților" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Produsul specific asociat cu această linie de comandă" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Cantitatea acestui produs specific din comandă" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Cantitatea produsului" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Starea actuală a acestui produs în comandă" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Starea liniei de produse" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Identificator intern de etichetă pentru eticheta produsului" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Nume etichetă" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Nume ușor de utilizat pentru eticheta produsului" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Nume afișare etichetă" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Etichetă produs" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "Furnizați text alternativ pentru imagine pentru accesibilitate" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Textul alt al imaginii" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Încărcați fișierul de imagine pentru acest produs" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Imaginea produsului" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Determină ordinea în care sunt afișate imaginile" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Prioritatea afișării" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Produsul pe care îl reprezintă această imagine" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Imagini ale produsului" -#: core/models.py:951 +#: core/models.py:956 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:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Cod promoțional de identificare" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "Valoarea fixă a reducerii aplicate dacă procentul nu este utilizat" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Valoarea fixă a reducerii" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "Procentul de reducere aplicat dacă suma fixă nu este utilizată" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Reducere procentuală" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Data la care expiră codul promoțional" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Timpul final de valabilitate" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Timestamp de la care acest cod promoțional este valabil" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Ora de începere a valabilității" -#: core/models.py:984 +#: core/models.py:989 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:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Timestamp de utilizare" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Utilizatorul atribuit acestui cod promoțional, dacă este cazul" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Utilizator atribuit" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Cod promoțional" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Coduri promoționale" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1524,140 +1529,140 @@ msgstr "" "Trebuie definit un singur tip de reducere (sumă sau procent), dar nu ambele " "sau niciuna." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Codul promoțional a fost deja utilizat" -#: core/models.py:1033 +#: core/models.py:1038 #, 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:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Procentul de reducere pentru produsele selectate" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Procent de reducere" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Furnizați un nume unic pentru această promoție" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Numele promoției" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Descrierea promoției" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Selectați ce produse sunt incluse în această promoție" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Produse incluse" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Promovare" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Furnizorul care furnizează acest stoc de produse" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Furnizor asociat" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Prețul final pentru client după majorări" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Prețul de vânzare" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Produsul asociat cu această intrare în stoc" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "Prețul plătit vânzătorului pentru acest produs" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Prețul de achiziție al furnizorului" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Cantitatea disponibilă a produsului în stoc" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Cantitate în stoc" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "SKU atribuit de furnizor pentru identificarea produsului" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU al furnizorului" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Fișier digital asociat cu acest stoc, dacă este cazul" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Fișier digital" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Intrări pe stoc" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Produse pe care utilizatorul le-a marcat ca fiind dorite" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Utilizatorul care deține această listă de dorințe" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Proprietarul listei de dorințe" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Lista dorințelor" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Descărcare" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Descărcări" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "Nu puteți descărca un bun digital pentru o comandă nefinalizată" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Documentar" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Documentare" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Nerezolvat" diff --git a/core/locale/ru_RU/LC_MESSAGES/django.mo b/core/locale/ru_RU/LC_MESSAGES/django.mo index 931039796c78ec432330220149b7f987730232f2..6ef53e2c4c98366f7e42d141fad8aacb08723c41 100644 GIT binary patch delta 9120 zcmZwNd3;Y-{>Sk{f*^<_h=}?oM1lyh#+umo*os(di(Tw%E8kdZtu{+{Fam_Oz|eDeH!&b{Az&pqed`%U`j$}GRDtNpyU zgZ;A&TTVV>A~2$uG1c>9xLS?LjWVVbUP0~u&goy#m{96SXFV)O-2uzua16uQ7=jxx z1`i;oFxQdeyygYTY8pZ+aWdS4NAnwV5p{t~K2-&?u`-^*1kA$#42!kod{vQeMxlT(HMktP#wzB0l3e#pKxBnBDCK^b?5UQP)C^R2pjkTGaVI#X@)$y_$=gBWJY z>hrxY5NBclE*oERKHhcF2OU74s}PiEhvjY-6KY=FbPBgm~z!FU2g@iKbwK58xb z*V7tc{wt8^PAXw1tcQJY9(Kh$s177>_TpF{TVrd~9W6!O`C8P-Y(bsx0CFvJ8e{P( zY7JE2F0?-e>+AV%K%zx60a+(zGlt-oSQ_u5UailuDTcCgbm8u(IqdHoiMrz{NT1C@ ztd6IU!8MQ34ycS)T=a{d8mMi=)qLfV>JVH zhZz`-E1dhV4fT1{R2OgTp8qn9?a+EqC#ZqC^E#+I>VO)N0T_l8Q5{|4+Sj9|U_bH% zn(DFh?XgSw+8s0*f| zI{F&w^HY&oGV@W3?iA|t*HBY+7j>S;sI^eUn`Dz<)E$N+>%_!kbsUEJ@>z{qj5kmx zu9j@?AQ^R{)~L^?pl)C=>ITN6+P$cbWTD;zIjH^K_es>V)2IV3p$@o#nxluV{u#?q z`!}l&wb{cL=q3Pa?;A%>@$mN5H+x8` z;YXN&-#W|C8{JVmjKRrR1vk0&^Qeyh18ZT`wzlq%I?o!^9sdD&;>hcI#wE=r|@*-$NZ&F~xo@ zcg4!o85oN@Q6q9Wh4I%N73pl}GzqIxr(t`Tkz(D*Sb>8P#1510m+Q*?aYA(B=Mqm*#8)h|D!P^*(0o`l|<573i8%tm& zYKm5%?mQcV@hq0Z>!=R@g!)_=Rw(Zv<84Z!p3g#EcrI#gmSGrXqweSc>Zv%6IxZJ= z2j5^JEc&W3gD?c+aSBG_4s40%QBzp7hg}h~LE*Gv!w)1Ewv(?pYWr$HB(f$I4_tboU{GTwA`zR`9nB2gpI5i4Rk zmcdmRgnO|bp1}6_6Y4rm#@G=ag3O-zWDK{#6Jf%}+BqDJdQP{YhUx$o!5>i_`4?(V zqtdO(Se1GJ>T`=w9a)2VIu5w{HkPG+iV+wz&UUD}mqZupj_P?fYG`&jKSJH%CDauC z=-R`_+xF@hPkUGFf|*zluV6X+8pH4x)S4;@t z-48q9JoMcW>VtP&-D0}!NH<(a`&?{+fivvic3rS3^pV789UFhzvDf|TGak?`JDml zqaL?|SQ@WmDSYhO{pRtDEp?T7jDHuB6*TC8yI2jMp?X}A9~zN&P|va7e0!l3)Sb-6 zX1Eu#@DZxxnG5WQE=SdyurBUHy^!u=3MMaP2(FPVX95Fo=ptUnI2KD{E+*qW)SOjZ zY}Z5*cBNi|+JDRW$`V_@=FD;4MRg?VExU*lus(HXFNu1#0GH!Q^kAo@wnOQtp`3;V zaWh8Y4y=S1T>S{O*h(z3L!N>asnakJ7hykKgFEnNT<>3}g*l3@k zTuh{{y2+0C5cFy;rjsP&R@6xR6?tcv{5<5taW?Ykn!jTM9Lrht0@>~SGuELlwAHpZ zc8+mw!lvxMgc(>g$G*T8=P>?EhY8%q7X!YHqwssIjXmGCi*hjzp}vdiP^;~>eZSM6 zCEb(uzRp9)pqRot=`3zXZr+sK#p@XNI}>+%`Ae0Cv%Bqq4fohr=pN*s8SoCTODwdP zg@+fMBlg+-h2OPvdI)>5|1&Iu<@ehgs*B~QGw?cYz_K{ufPH~2@sbp$;Rsg3v#x%C zIn>WkPs6(R>|)x9ZK#i7EdCpH!kB~no`}uxHXcFUK-T-Vz40L~O8p*o#K^<;YuTGl z(uamqn2O;?_)lm!3H#$6Y>Q2f+7HghCe&Zyt61`wbr|ZzCs0!q@Byz~9FIk?*oXFU z4#T?CaoAkX|6r0J8g`=Y=on7JJ6HpIeZ>187hpIh9A}+iM;welV0Y|x!u|oW3wuxp zd~8?y01TsEi(~L0CSduK`W*A$nWQTX+mRlbf1-vm@e|vzeW*G87=!T|*23>F8pBy2 z>S!|RLgR5LF2YcJf-BMQv>oznOr_4lx4a}tXY3-mgpt$_un89V)b_M3Y7x!Efw%@4 z9PdTmf1wOZP)(RU^zm9Qu4As&5SQ8^J8pCybTX}v~aYbwLa^zd^5%H9WBHq;e-y-Qu zXsc{7QSO84wYDn67li)o8i1XUYx>^%;M;!S=Q}Ph={}c2o$cDhd}0xy_2ut7hVjp& z7*7#^TB#B4!=$DUc{i&ekEe#9&|F;M-E!HjU*ERqb60OKL5jDv>6T`?G;aK8V zaxM54gg29hm)mfcm%&;@DYv8Be;qTJwzr8w#B|y#;Sk~t;v}(=wnkVHqw#eNBzBM& zBeY(^sC(h4eBA$kNVJ-}(x^=@pQ$caU6gztp-1cn(Skf5!F$OR!IxWimw)FP{)z=% z-U)e4_`VBfa@-PPAn}cF{Mn&5nYM6?@8{Ppf0YB55!%KRP00`WD*n?N{^s(6v`;2B zP=84*CJ!d!iTczN+;O4{ZQ4p|{{KZxpy4l=gy-=YQNkVc9{IP#NaE$T%O&$Lhgi+A zBZ!|}`&{x1 zgtlzjcj7~$EwPST+wT_N7t!Cyw-P;x2CjV)$Mtpjb_~kL_zxsm%8r)ATf|xFzF3-g zxqa|5ac2G3zIwFXC-T$w8GcXnB>xI$653V~A-;^4ko#;iO!T@!`z8~-(tTSOXG2_1 zbR$AJHXiQ~+Ab1r`7-|7F$TF@#JIcxpD9XyhKME~OlYfv9nkx4e#{}-({LDHZsn;x z6bD^{zEZc+rtMAq2mYN{L*AMQCk{|wCbZ2ZdeNpWkk~+;?&=jdowojZ|8=C$U%A>Y z5c_=@e|TVRViEg#6U*H(8MM7ZUK0lq8;R=F74a8hGofveJAM}VGG7ay!veG)!&*c? z&A+x#;yF=_oo$H9?!)Z3m*dtFLy0}q z-HGPf;kFKX{5|A_J$ZF6YTmhAg!f6S(>x2x-sS9SR~XC<`}?^4%CZD|(Y z&s=`CBxVpj*#Boel(R@i66Jh{(8I$gqrwZ+^h}wQHqkS7%B0Dj5rd|tdB&xWnZb`V z&-k?Tp(E3Wd&W&1$^nBWdj@$Xj~ttJ_)jr68fAqZEnUr%`*H3kxyN#kUYX+|Ig)#l spNFnw<{o9oQ7URr?uRO}x-Ki1)%-$8v5z>CBaZN)%*ez0hUBIFA5s{jPyhe` delta 8985 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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 2b0a8ecb..047f4cdf 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: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -83,7 +83,7 @@ msgstr "Изображение" msgid "images" msgstr "Изображения" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "Наличие" @@ -91,7 +91,7 @@ msgstr "Наличие" msgid "stocks" msgstr "Наличия" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -99,35 +99,35 @@ msgstr "Наличия" msgid "price" msgstr "Цена" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "Рейтинг продукции" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "Основная информация" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "Важные даты" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "Переводы" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "Заказать товар" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "Заказать товары" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Бизнес" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "Конфигурация" @@ -517,55 +517,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "Список всех продуктов (простой вид)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(точный) UUID продукта" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(иконки) Название продукта" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(список) Названия категорий, без учета регистра" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(точный) UUID категории" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(список) Имена тегов, нечувствительные к регистру" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) Минимальная цена акции" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) Максимальная цена акции" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(точно) Только активные продукты" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) Торговое название" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) Минимальное количество на складе" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(точный) Артикул" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(точно) Цифровые и физические" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -573,35 +573,35 @@ msgstr "" "Список полей для сортировки, разделенных запятыми. Для сортировки по убыванию используйте префикс `-`. \n" "**Разрешенные:** uuid, рейтинг, название, slug, created, modified, price, random" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "Получение одного продукта (подробный просмотр)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "UUID или Slug продукта" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "Создать продукт" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "Переписать существующий продукт, сохранив нередактируемые поля" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "" "Обновление некоторых полей существующего продукта с сохранением " "нередактируемых полей" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "Удалить продукт" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "Поисковый запрос не предоставлен." @@ -658,7 +658,7 @@ msgstr "" "варианты!" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "Неправильный тип получен из метода order.buy(): {type(instance)!s}" @@ -849,7 +849,7 @@ msgstr "Промокоды" msgid "products on sale" msgstr "Продукты в продаже" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "Акции" @@ -865,11 +865,11 @@ msgstr "Поставщик" msgid "product" msgstr "Продукт" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "Продукты из списка желаний" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "Списки желаний" @@ -1017,8 +1017,8 @@ msgstr "Атрибут этого значения" msgid "the specific product associated with this attribute's value" msgstr "Конкретный продукт, связанный со значением этого атрибута" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "Сопутствующий товар" @@ -1114,7 +1114,7 @@ msgstr "По желанию ассоциируйте этот продукт с msgid "tags that help describe or group this product" msgstr "Теги, которые помогают описать или сгруппировать этот продукт" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "Теги товара" @@ -1134,7 +1134,7 @@ msgstr "Обеспечьте четкое идентификационное н msgid "product name" msgstr "Название продукта" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "Добавьте подробное описание продукта" @@ -1234,7 +1234,7 @@ msgstr "Текущий статус заказа в его жизненном ц msgid "order status" msgstr "Статус заказа" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "" "JSON-структура уведомлений для отображения пользователям, в административном" @@ -1272,57 +1272,61 @@ msgstr "человекочитаемый идентификатор" msgid "order" msgstr "Заказать" -#: core/models.py:536 +#: core/models.py:517 +msgid "a user must have only one pending order at a time" +msgstr "Пользователь может одновременно иметь только один отложенный ордер!" + +#: core/models.py:541 msgid "you cannot add products to an order that is not a pending one" msgstr "Вы не можете добавить товары в заказ, который не является отложенным." -#: core/models.py:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "Вы не можете добавить неактивные товары в заказ" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "Вы не можете добавить больше товаров, чем есть на складе" -#: core/models.py:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} не существует: {product_uuid}" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 msgid "you cannot remove products from an order that is not a pending one" msgstr "" "Вы не можете удалить товары из заказа, который не является отложенным." -#: core/models.py:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "{name} не существует в запросе <{query}>." -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "Промокод не существует" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "" "В данный момент вы не можете совершить покупку, пожалуйста, повторите " "попытку через несколько минут." -#: core/models.py:629 +#: core/models.py:634 msgid "invalid force value" msgstr "Недопустимое значение силы" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "Вы не можете приобрести пустой заказ!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "Недостаточно средств для выполнения заказа" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" @@ -1330,194 +1334,194 @@ msgstr "" "Вы не можете купить без регистрации, пожалуйста, предоставьте следующую " "информацию: имя клиента, электронная почта клиента, номер телефона клиента" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "Неверный метод оплаты" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "" "Вы не можете создать заказ momental, не указав адрес для выставления счета" -#: core/models.py:779 +#: core/models.py:784 msgid "the price paid by the customer for this product at purchase time" msgstr "Цена, уплаченная клиентом за данный продукт на момент покупки" -#: core/models.py:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "Покупная цена на момент заказа" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "" "Внутренние комментарии для администраторов об этом заказанном продукте" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "Внутренние комментарии" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "Уведомления пользователей" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "JSON-представление атрибутов этого элемента" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "Атрибуты заказанного продукта" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "Ссылка на родительский заказ, содержащий данный продукт" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "Родительский приказ" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "Конкретный продукт, связанный с этой линией заказа" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "Количество данного товара в заказе" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "Количество продукта" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "Текущий статус этого продукта в заказе" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "Состояние продуктовой линейки" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "Внутренний идентификатор тега для тега продукта" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "Название тега" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "Удобное название для метки продукта" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "Отображаемое имя тега" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "Метка продукта" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "" "Предоставьте альтернативный текст для изображения, чтобы обеспечить " "доступность" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "Альтовый текст изображения" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "Загрузите файл изображения для этого продукта" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "Изображение продукта" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "Определяет порядок отображения изображений" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "Приоритет отображения" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "Продукт, который представлен на этом изображении" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "Изображения продуктов" -#: core/models.py:951 +#: core/models.py:956 msgid "unique code used by a user to redeem a discount" msgstr "Уникальный код, используемый пользователем для получения скидки" -#: core/models.py:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "Идентификатор промо-кода" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "Фиксированная сумма скидки, применяемая, если процент не используется" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "Фиксированная сумма скидки" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "" "Процентная скидка, применяемая, если фиксированная сумма не используется" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "Процентная скидка" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "Временная метка, когда истекает срок действия промокода" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "Время окончания срока действия" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "Время, с которого действует этот промокод" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "Время начала действия" -#: core/models.py:984 +#: core/models.py:989 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "" "Временная метка, когда был использован промокод, пустая, если он еще не " "использовался" -#: core/models.py:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "Временная метка использования" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "Пользователь, назначенный на этот промокод, если применимо" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "Назначенный пользователь" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "Промокод" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "Промокоды" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." @@ -1525,140 +1529,140 @@ msgstr "" "Следует определить только один тип скидки (сумма или процент), но не оба или" " ни один из них." -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "Промокоды" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "Неверный тип скидки для промокода {self.uuid}" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "Процентная скидка на выбранные продукты" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "Процент скидки" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "Укажите уникальное имя для этой акции" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "Название акции" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "Описание акции" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "Выберите, какие продукты участвуют в этой акции" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "Включенные продукты" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "Продвижение" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "Поставщик, поставляющий данный товар на склад" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "Ассоциированный поставщик" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "Окончательная цена для покупателя после наценок" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "Цена продажи" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "Продукт, связанный с этой складской записью" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "Цена, уплаченная продавцу за этот продукт" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "Цена покупки у поставщика" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "Доступное количество продукта на складе" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "Количество на складе" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "Присвоенный поставщиком SKU для идентификации продукта" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "SKU поставщика" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "Цифровой файл, связанный с этой акцией, если применимо" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "Цифровой файл" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "Проводки по запасам" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "Продукты, которые пользователь отметил как желаемые" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "Пользователь, владеющий этим списком желаний" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "Владелец вишлиста" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "Список желаний" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "Скачать" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "Скачать" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "Вы не можете загрузить цифровой актив для незавершенного заказа" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "Документальный фильм" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "Документальные фильмы" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "Неразрешенные" diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.mo b/core/locale/zh_Hans/LC_MESSAGES/django.mo index 52373b7f2718be41775855f1f4075adebb406faf..e783b96c599e12ed5cec70b11676a8f0c15f0923 100644 GIT binary patch delta 9087 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 delta 8985 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 N@tHRJVhcZP_Fw(r_UZrt diff --git a/core/locale/zh_Hans/LC_MESSAGES/django.po b/core/locale/zh_Hans/LC_MESSAGES/django.po index 1c5d01dc..2d3c65e6 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: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 15:33+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -79,7 +79,7 @@ msgstr "图片" msgid "images" msgstr "图片" -#: core/admin.py:160 core/models.py:1127 +#: core/admin.py:160 core/models.py:1132 msgid "stock" msgstr "库存" @@ -87,7 +87,7 @@ msgstr "库存" msgid "stocks" msgstr "股票" -#: core/admin.py:191 core/graphene/object_types.py:320 +#: core/admin.py:192 core/graphene/object_types.py:320 #: core/templates/digital_order_created_email.html:109 #: core/templates/digital_order_delivered_email.html:109 #: core/templates/shipped_order_created_email.html:95 @@ -95,35 +95,35 @@ msgstr "股票" msgid "price" msgstr "价格" -#: core/admin.py:196 +#: core/admin.py:197 msgid "rating" msgstr "产品评级" -#: core/admin.py:200 +#: core/admin.py:201 msgid "basic info" msgstr "基本信息" -#: core/admin.py:214 +#: core/admin.py:215 msgid "important dates" msgstr "重要日期" -#: core/admin.py:215 +#: core/admin.py:216 msgid "translations" msgstr "翻译" -#: core/admin.py:253 core/models.py:837 +#: core/admin.py:254 core/models.py:842 msgid "order product" msgstr "订购产品" -#: core/admin.py:254 core/graphene/object_types.py:242 core/models.py:838 +#: core/admin.py:255 core/graphene/object_types.py:242 core/models.py:843 msgid "order products" msgstr "订购产品" -#: core/admin.py:273 +#: core/admin.py:274 msgid "is business" msgstr "Is Business" -#: core/admin.py:381 +#: core/admin.py:382 msgid "config" msgstr "配置" @@ -475,55 +475,55 @@ msgstr "" msgid "list all products (simple view)" msgstr "列出所有产品(简单视图)" -#: core/docs/drf/viewsets.py:278 +#: core/docs/drf/viewsets.py:281 msgid "(exact) Product UUID" msgstr "(产品 UUID" -#: core/docs/drf/viewsets.py:279 +#: core/docs/drf/viewsets.py:287 msgid "(icontains) Product name" msgstr "(图示) 产品名称" -#: core/docs/drf/viewsets.py:280 +#: core/docs/drf/viewsets.py:293 msgid "(list) Category names, case-insensitive" msgstr "(列表) 类别名称,不区分大小写" -#: core/docs/drf/viewsets.py:282 +#: core/docs/drf/viewsets.py:299 msgid "(exact) Category UUID" msgstr "(类别 UUID" -#: core/docs/drf/viewsets.py:283 +#: core/docs/drf/viewsets.py:305 msgid "(list) Tag names, case-insensitive" msgstr "(标签名称,不区分大小写" -#: core/docs/drf/viewsets.py:284 +#: core/docs/drf/viewsets.py:311 msgid "(gte) Minimum stock price" msgstr "(gte) 最低股价" -#: core/docs/drf/viewsets.py:285 +#: core/docs/drf/viewsets.py:317 msgid "(lte) Maximum stock price" msgstr "(lte) 最高股价" -#: core/docs/drf/viewsets.py:286 +#: core/docs/drf/viewsets.py:323 msgid "(exact) Only active products" msgstr "(准确)只有活性产品" -#: core/docs/drf/viewsets.py:287 +#: core/docs/drf/viewsets.py:329 msgid "(iexact) Brand name" msgstr "(iexact) 品牌名称" -#: core/docs/drf/viewsets.py:289 +#: core/docs/drf/viewsets.py:341 msgid "(gt) Minimum stock quantity" msgstr "(gt) 最低库存量" -#: core/docs/drf/viewsets.py:290 +#: core/docs/drf/viewsets.py:347 msgid "(exact) Product slug" msgstr "(准确) 产品标题" -#: core/docs/drf/viewsets.py:291 +#: core/docs/drf/viewsets.py:353 msgid "(exact) Digital vs. physical" msgstr "(准确)数字与实物" -#: core/docs/drf/viewsets.py:295 +#: core/docs/drf/viewsets.py:360 msgid "" "Comma-separated list of fields to sort by. Prefix with `-` for descending. \n" "**Allowed:** uuid, rating, name, slug, created, modified, price, random" @@ -531,33 +531,33 @@ msgstr "" "用逗号分隔的要排序的字段列表。前缀为 `-` 表示降序。 \n" "**允许:** uuid、评分、名称、标签、创建、修改、价格、随机" -#: core/docs/drf/viewsets.py:310 +#: core/docs/drf/viewsets.py:374 msgid "retrieve a single product (detailed view)" msgstr "检索单个产品(详细视图)" -#: core/docs/drf/viewsets.py:311 core/docs/drf/viewsets.py:320 -#: core/docs/drf/viewsets.py:325 core/docs/drf/viewsets.py:330 +#: core/docs/drf/viewsets.py:379 core/docs/drf/viewsets.py:401 +#: core/docs/drf/viewsets.py:416 core/docs/drf/viewsets.py:431 msgid "Product UUID or slug" msgstr "产品 UUID 或 Slug" -#: core/docs/drf/viewsets.py:315 +#: core/docs/drf/viewsets.py:389 msgid "create a product" msgstr "创建产品" -#: core/docs/drf/viewsets.py:319 +#: core/docs/drf/viewsets.py:396 msgid "rewrite an existing product, preserving non-editable fields" msgstr "重写现有产品,保留不可编辑字段" -#: core/docs/drf/viewsets.py:324 +#: core/docs/drf/viewsets.py:411 msgid "" "update some fields of an existing product, preserving non-editable fields" msgstr "更新现有产品的某些字段,保留不可编辑的字段" -#: core/docs/drf/viewsets.py:329 +#: core/docs/drf/viewsets.py:426 msgid "delete a product" msgstr "删除产品" -#: core/elasticsearch/__init__.py:39 +#: core/elasticsearch/__init__.py:40 msgid "no search term provided." msgstr "未提供搜索条件。" @@ -612,7 +612,7 @@ msgid "please provide either order_uuid or order_hr_id - mutually exclusive" msgstr "请提供 order_uuid 或 order_hr_id(互斥)!" #: core/graphene/mutations.py:201 core/graphene/mutations.py:355 -#: core/graphene/mutations.py:389 core/viewsets.py:248 +#: core/graphene/mutations.py:389 core/viewsets.py:253 msgid "wrong type came from order.buy() method: {type(instance)!s}" msgstr "order.buy() 方法中的类型有误:{type(instance)!s}" @@ -795,7 +795,7 @@ msgstr "促销代码" msgid "products on sale" msgstr "销售产品" -#: core/graphene/object_types.py:405 core/models.py:1068 +#: core/graphene/object_types.py:405 core/models.py:1073 msgid "promotions" msgstr "促销活动" @@ -811,11 +811,11 @@ msgstr "供应商" msgid "product" msgstr "产品" -#: core/graphene/object_types.py:421 core/models.py:1138 +#: core/graphene/object_types.py:421 core/models.py:1143 msgid "wishlisted products" msgstr "心愿单上的产品" -#: core/graphene/object_types.py:427 core/models.py:1155 +#: core/graphene/object_types.py:427 core/models.py:1160 msgid "wishlists" msgstr "愿望清单" @@ -961,8 +961,8 @@ msgstr "该值的属性" msgid "the specific product associated with this attribute's value" msgstr "与该属性值相关的特定产品" -#: core/models.py:142 core/models.py:814 core/models.py:928 -#: core/models.py:1094 +#: core/models.py:142 core/models.py:819 core/models.py:933 +#: core/models.py:1099 msgid "associated product" msgstr "相关产品" @@ -1058,7 +1058,7 @@ msgstr "可选择将该产品与某个品牌联系起来" msgid "tags that help describe or group this product" msgstr "有助于描述或归类该产品的标签" -#: core/models.py:280 core/models.py:902 +#: core/models.py:280 core/models.py:907 msgid "product tags" msgstr "产品标签" @@ -1078,7 +1078,7 @@ msgstr "为产品提供一个明确的标识名称" msgid "product name" msgstr "产品名称" -#: core/models.py:297 core/models.py:1056 +#: core/models.py:297 core/models.py:1061 msgid "add a detailed description of the product" msgstr "添加产品的详细描述" @@ -1175,7 +1175,7 @@ msgstr "订单在其生命周期中的当前状态" msgid "order status" msgstr "订单状态" -#: core/models.py:471 core/models.py:791 +#: core/models.py:471 core/models.py:796 msgid "json structure of notifications to display to users" msgstr "向用户显示的通知的 JSON 结构,在管理用户界面中使用表格视图" @@ -1211,379 +1211,383 @@ msgstr "人类可读 ID" msgid "order" msgstr "订购" -#: core/models.py:536 +#: core/models.py:517 +msgid "a user must have only one pending order at a time" +msgstr "用户每次只能有一个挂单!" + +#: core/models.py:541 msgid "you cannot add products to an order that is not a pending one" msgstr "您不能向非待处理订单添加产品" -#: core/models.py:541 +#: core/models.py:546 msgid "you cannot add inactive products to order" msgstr "您不能在订单中添加非活动产品" -#: core/models.py:558 +#: core/models.py:563 msgid "you cannot add more products than available in stock" msgstr "添加的产品数量不能超过现有库存" -#: core/models.py:567 core/models.py:584 core/models.py:608 -#: core/models.py:1165 core/models.py:1176 +#: core/models.py:572 core/models.py:589 core/models.py:613 +#: core/models.py:1170 core/models.py:1181 #, python-brace-format msgid "{name} does not exist: {product_uuid}" msgstr "{name} 不存在:{product_uuid} 不存在" -#: core/models.py:571 core/models.py:592 core/models.py:600 +#: core/models.py:576 core/models.py:597 core/models.py:605 msgid "you cannot remove products from an order that is not a pending one" msgstr "您不能从非待处理订单中删除产品" -#: core/models.py:588 +#: core/models.py:593 #, python-brace-format msgid "{name} does not exist with query <{query}>" msgstr "查询 <{query}> 时 {name} 不存在" -#: core/models.py:619 +#: core/models.py:624 msgid "promocode does not exist" msgstr "促销代码不存在" -#: core/models.py:626 core/models.py:665 +#: core/models.py:631 core/models.py:670 msgid "you can not buy at this moment, please try again in a few minutes" msgstr "您现在无法购买,请稍后再试。" -#: core/models.py:629 +#: core/models.py:634 msgid "invalid force value" msgstr "力值无效" -#: core/models.py:632 core/models.py:668 +#: core/models.py:637 core/models.py:673 msgid "you cannot purchase an empty order!" msgstr "您不能购买空单!" -#: core/models.py:647 +#: core/models.py:652 msgid "insufficient funds to complete the order" msgstr "资金不足,无法完成订单" -#: core/models.py:677 +#: core/models.py:682 msgid "" "you cannot buy without registration, please provide the following " "information: customer name, customer email, customer phone number" msgstr "未经注册不能购买,请提供以下信息:客户姓名、客户电子邮件、客户电话号码" -#: core/models.py:685 +#: core/models.py:690 msgid "invalid payment method" msgstr "付款方式无效" -#: core/models.py:701 +#: core/models.py:706 msgid "you cannot create a momental order without providing a billing address" msgstr "如果不提供账单地址,就无法创建妈妈订单" -#: core/models.py:779 +#: core/models.py:784 msgid "the price paid by the customer for this product at purchase time" msgstr "客户购买该产品时支付的价格" -#: core/models.py:780 +#: core/models.py:785 msgid "purchase price at order time" msgstr "订购时的购买价格" -#: core/models.py:785 +#: core/models.py:790 msgid "internal comments for admins about this ordered product" msgstr "管理员对该订购产品的内部评论" -#: core/models.py:786 +#: core/models.py:791 msgid "internal comments" msgstr "内部意见" -#: core/models.py:792 +#: core/models.py:797 msgid "user notifications" msgstr "用户通知" -#: core/models.py:797 +#: core/models.py:802 msgid "json representation of this item's attributes" msgstr "该项属性的 JSON 表示形式" -#: core/models.py:798 +#: core/models.py:803 msgid "ordered product attributes" msgstr "有序的产品属性" -#: core/models.py:803 +#: core/models.py:808 msgid "reference to the parent order that contains this product" msgstr "对包含该产品的父订单的引用" -#: core/models.py:804 +#: core/models.py:809 msgid "parent order" msgstr "父顺序" -#: core/models.py:813 +#: core/models.py:818 msgid "the specific product associated with this order line" msgstr "与该订单项目相关的具体产品" -#: core/models.py:820 +#: core/models.py:825 msgid "quantity of this specific product in the order" msgstr "订单中该特定产品的数量" -#: core/models.py:821 +#: core/models.py:826 msgid "product quantity" msgstr "产品数量" -#: core/models.py:828 +#: core/models.py:833 msgid "current status of this product in the order" msgstr "订单中该产品的当前状态" -#: core/models.py:829 +#: core/models.py:834 msgid "product line status" msgstr "产品系列状态" -#: core/models.py:887 +#: core/models.py:892 msgid "internal tag identifier for the product tag" msgstr "产品标签的内部标签标识符" -#: core/models.py:888 +#: core/models.py:893 msgid "tag name" msgstr "标签名称" -#: core/models.py:892 +#: core/models.py:897 msgid "user-friendly name for the product tag" msgstr "方便用户使用的产品标签名称" -#: core/models.py:893 +#: core/models.py:898 msgid "tag display name" msgstr "标签显示名称" -#: core/models.py:901 +#: core/models.py:906 msgid "product tag" msgstr "产品标签" -#: core/models.py:910 +#: core/models.py:915 msgid "provide alternative text for the image for accessibility" msgstr "为图像提供替代文字,以便于访问" -#: core/models.py:911 +#: core/models.py:916 msgid "image alt text" msgstr "图片 alt 文本" -#: core/models.py:914 +#: core/models.py:919 msgid "upload the image file for this product" msgstr "上传该产品的图片文件" -#: core/models.py:915 core/models.py:940 +#: core/models.py:920 core/models.py:945 msgid "product image" msgstr "产品图片" -#: core/models.py:921 +#: core/models.py:926 msgid "determines the order in which images are displayed" msgstr "确定图像的显示顺序" -#: core/models.py:922 +#: core/models.py:927 msgid "display priority" msgstr "显示优先级" -#: core/models.py:927 +#: core/models.py:932 msgid "the product that this image represents" msgstr "该图片所代表的产品" -#: core/models.py:941 +#: core/models.py:946 msgid "product images" msgstr "产品图片" -#: core/models.py:951 +#: core/models.py:956 msgid "unique code used by a user to redeem a discount" msgstr "用户用于兑换折扣的唯一代码" -#: core/models.py:952 +#: core/models.py:957 msgid "promo code identifier" msgstr "促销代码标识符" -#: core/models.py:959 +#: core/models.py:964 msgid "fixed discount amount applied if percent is not used" msgstr "如果不使用百分比,则使用固定折扣额" -#: core/models.py:960 +#: core/models.py:965 msgid "fixed discount amount" msgstr "固定折扣额" -#: core/models.py:966 +#: core/models.py:971 msgid "percentage discount applied if fixed amount is not used" msgstr "未使用固定金额时适用的折扣百分比" -#: core/models.py:967 +#: core/models.py:972 msgid "percentage discount" msgstr "折扣百分比" -#: core/models.py:972 +#: core/models.py:977 msgid "timestamp when the promocode expires" msgstr "促销代码过期的时间戳" -#: core/models.py:973 +#: core/models.py:978 msgid "end validity time" msgstr "结束有效时间" -#: core/models.py:978 +#: core/models.py:983 msgid "timestamp from which this promocode is valid" msgstr "该促销代码有效的时间戳" -#: core/models.py:979 +#: core/models.py:984 msgid "start validity time" msgstr "开始有效时间" -#: core/models.py:984 +#: core/models.py:989 msgid "timestamp when the promocode was used, blank if not used yet" msgstr "使用促销代码的时间戳,如果尚未使用,则留空" -#: core/models.py:985 +#: core/models.py:990 msgid "usage timestamp" msgstr "使用时间戳" -#: core/models.py:990 +#: core/models.py:995 msgid "user assigned to this promocode if applicable" msgstr "分配给此促销代码的用户(如适用" -#: core/models.py:991 +#: core/models.py:996 msgid "assigned user" msgstr "指定用户" -#: core/models.py:998 +#: core/models.py:1003 msgid "promo code" msgstr "促销代码" -#: core/models.py:999 +#: core/models.py:1004 msgid "promo codes" msgstr "促销代码" -#: core/models.py:1006 +#: core/models.py:1011 msgid "" "only one type of discount should be defined (amount or percent), but not " "both or neither." msgstr "只能定义一种折扣类型(金额或百分比),而不能同时定义两种类型或两者都不定义。" -#: core/models.py:1021 +#: core/models.py:1026 msgid "promocode already used" msgstr "促销代码已被使用" -#: core/models.py:1033 +#: core/models.py:1038 #, python-brace-format msgid "invalid discount type for promocode {self.uuid}" msgstr "促销代码 {self.uuid} 的折扣类型无效" -#: core/models.py:1044 +#: core/models.py:1049 msgid "percentage discount for the selected products" msgstr "所选产品的折扣百分比" -#: core/models.py:1045 +#: core/models.py:1050 msgid "discount percentage" msgstr "折扣百分比" -#: core/models.py:1050 +#: core/models.py:1055 msgid "provide a unique name for this promotion" msgstr "为该促销活动提供一个独特的名称" -#: core/models.py:1051 +#: core/models.py:1056 msgid "promotion name" msgstr "推广名称" -#: core/models.py:1057 +#: core/models.py:1062 msgid "promotion description" msgstr "促销说明" -#: core/models.py:1062 +#: core/models.py:1067 msgid "select which products are included in this promotion" msgstr "选择促销活动包括哪些产品" -#: core/models.py:1063 +#: core/models.py:1068 msgid "included products" msgstr "包括产品" -#: core/models.py:1067 +#: core/models.py:1072 msgid "promotion" msgstr "促销活动" -#: core/models.py:1082 +#: core/models.py:1087 msgid "the vendor supplying this product stock" msgstr "提供该产品库存的供应商" -#: core/models.py:1083 +#: core/models.py:1088 msgid "associated vendor" msgstr "相关供应商" -#: core/models.py:1087 +#: core/models.py:1092 msgid "final price to the customer after markups" msgstr "加价后给客户的最终价格" -#: core/models.py:1088 +#: core/models.py:1093 msgid "selling price" msgstr "销售价格" -#: core/models.py:1093 +#: core/models.py:1098 msgid "the product associated with this stock entry" msgstr "与该库存条目相关的产品" -#: core/models.py:1101 +#: core/models.py:1106 msgid "the price paid to the vendor for this product" msgstr "为该产品支付给供应商的价格" -#: core/models.py:1102 +#: core/models.py:1107 msgid "vendor purchase price" msgstr "供应商购买价格" -#: core/models.py:1106 +#: core/models.py:1111 msgid "available quantity of the product in stock" msgstr "产品的可用库存量" -#: core/models.py:1107 +#: core/models.py:1112 msgid "quantity in stock" msgstr "库存数量" -#: core/models.py:1111 +#: core/models.py:1116 msgid "vendor-assigned SKU for identifying the product" msgstr "供应商指定的 SKU,用于识别产品" -#: core/models.py:1112 +#: core/models.py:1117 msgid "vendor sku" msgstr "供应商 SKU" -#: core/models.py:1118 +#: core/models.py:1123 msgid "digital file associated with this stock if applicable" msgstr "与该库存相关的数字文件(如适用" -#: core/models.py:1119 +#: core/models.py:1124 msgid "digital file" msgstr "数字文件" -#: core/models.py:1128 +#: core/models.py:1133 msgid "stock entries" msgstr "库存条目" -#: core/models.py:1137 +#: core/models.py:1142 msgid "products that the user has marked as wanted" msgstr "用户标记为想要的产品" -#: core/models.py:1145 +#: core/models.py:1150 msgid "user who owns this wishlist" msgstr "拥有此愿望清单的用户" -#: core/models.py:1146 +#: core/models.py:1151 msgid "wishlist owner" msgstr "心愿单所有者" -#: core/models.py:1154 +#: core/models.py:1159 msgid "wishlist" msgstr "愿望清单" -#: core/models.py:1194 +#: core/models.py:1199 msgid "download" msgstr "下载" -#: core/models.py:1195 +#: core/models.py:1200 msgid "downloads" msgstr "下载" -#: core/models.py:1203 +#: core/models.py:1208 msgid "you can not download a digital asset for a non-finished order" msgstr "您无法下载未完成订单的数字资产" -#: core/models.py:1215 +#: core/models.py:1220 msgid "documentary" msgstr "纪录片" -#: core/models.py:1216 +#: core/models.py:1221 msgid "documentaries" msgstr "纪录片" -#: core/models.py:1226 +#: core/models.py:1231 msgid "unresolved" msgstr "未解决" diff --git a/core/models.py b/core/models.py index 65f54ad2..7638cfdb 100644 --- a/core/models.py +++ b/core/models.py @@ -39,8 +39,8 @@ from mptt.models import MPTTModel from core.abstract import NiceModel from core.choices import ORDER_PRODUCT_STATUS_CHOICES, ORDER_STATUS_CHOICES -from core.errors import NotEnoughMoneyError, DisabledCommerceError -from core.utils import get_product_uuid_as_path, get_random_code, generate_human_readable_id +from core.errors import DisabledCommerceError, NotEnoughMoneyError +from core.utils import generate_human_readable_id, get_product_uuid_as_path, get_random_code from core.utils.lists import FAILED_STATUSES from core.validators import validate_category_image_dimensions from evibes.settings import CURRENCY_CODE @@ -512,19 +512,24 @@ class Order(NiceModel): def is_business(self) -> bool: return self.attributes.get("is_business", False) if self.attributes else False + def save(self, **kwargs): + if self.user.orders.filter(status="PENDING").count() > 1 and self.status == "PENDING": + raise ValueError(_("a user must have only one pending order at a time")) + return super().save(**kwargs) + @property def total_price(self) -> float: return ( - round( - sum( - order_product.buy_price * order_product.quantity - if order_product.status not in FAILED_STATUSES and order_product.buy_price is not None - else 0.0 - for order_product in self.order_products.all() - ), - 2, - ) - or 0.0 + round( + sum( + order_product.buy_price * order_product.quantity + if order_product.status not in FAILED_STATUSES and order_product.buy_price is not None + else 0.0 + for order_product in self.order_products.all() + ), + 2, + ) + or 0.0 ) @property @@ -620,7 +625,7 @@ class Order(NiceModel): return promocode.use(self) def buy( - self, force_balance: bool = False, force_payment: bool = False, promocode_uuid: str | None = None + self, force_balance: bool = False, force_payment: bool = False, promocode_uuid: str | None = None ) -> Self | Transaction | None: if config.DISABLED_COMMERCE: raise DisabledCommerceError(_("you can not buy at this moment, please try again in a few minutes")) @@ -691,12 +696,12 @@ class Order(NiceModel): billing_customer_address_line = billing_customer_address.pop("customer_address_line") if not all( - [ - billing_customer_city, - billing_customer_country, - billing_customer_postal_code, - billing_customer_address_line, - ] + [ + billing_customer_city, + billing_customer_country, + billing_customer_postal_code, + billing_customer_address_line, + ] ): raise ValueError(_("you cannot create a momental order without providing a billing address")) @@ -755,16 +760,16 @@ class Order(NiceModel): def finalize(self): if ( - self.order_products.filter( - status__in=[ - "ACCEPTED", - "FAILED", - "RETURNED", - "CANCELED", - "FINISHED", - ] - ).count() - == self.order_products.count() + self.order_products.filter( + status__in=[ + "ACCEPTED", + "FAILED", + "RETURNED", + "CANCELED", + "FINISHED", + ] + ).count() + == self.order_products.count() ): self.status = "FINISHED" self.save() @@ -1000,7 +1005,7 @@ class PromoCode(NiceModel): def save(self, **kwargs): if (self.discount_amount is not None and self.discount_percent is not None) or ( - self.discount_amount is None and self.discount_percent is None + self.discount_amount is None and self.discount_percent is None ): raise ValidationError( _("only one type of discount should be defined (amount or percent), but not both or neither.") diff --git a/core/viewsets.py b/core/viewsets.py index 1c6e07de..7eb2fb31 100644 --- a/core/viewsets.py +++ b/core/viewsets.py @@ -223,9 +223,14 @@ class OrderViewSet(EvibesViewSet): @action(detail=False, methods=["get"], url_path="current") def current(self, request, *_args, **kwargs): + if not request.user.is_authenticated: + raise PermissionDenied(permission_denied_message) + order = Order.objects.get(user=request.user, status="PENDING") + if not request.user == order.user: + raise PermissionDenied(permission_denied_message) return Response( status=status.HTTP_200_OK, - data=OrderDetailSerializer(Order.objects.filter(user=request.user)).data, + data=OrderDetailSerializer(order).data, ) @action(detail=True, methods=["post"], url_path="buy") @@ -377,9 +382,14 @@ class WishlistViewSet(EvibesViewSet): @action(detail=False, methods=["get"], url_path="current") def current(self, request, *_args, **kwargs): + if not request.user.is_authenticated: + raise PermissionDenied(permission_denied_message) + wishlist = Wishlist.objects.get(user=request.user) + if not request.user == wishlist.user: + raise PermissionDenied(permission_denied_message) return Response( status=status.HTTP_200_OK, - data=WishlistDetailSerializer(Wishlist.objects.get(user=request.user)).data, + data=WishlistDetailSerializer().data, ) @action(detail=True, methods=["post"], url_path="add_wishlist_product") @@ -396,7 +406,7 @@ class WishlistViewSet(EvibesViewSet): ) return Response(status=status.HTTP_200_OK, data=WishlistDetailSerializer(wishlist).data) - except Order.DoesNotExist: + except Wishlist.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) @action(detail=True, methods=["post"], url_path="remove_wishlist_product") @@ -413,7 +423,7 @@ class WishlistViewSet(EvibesViewSet): ) return Response(status=status.HTTP_200_OK, data=WishlistDetailSerializer(wishlist).data) - except Order.DoesNotExist: + except Wishlist.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) @action(detail=True, methods=["post"], url_path="bulk_add_wishlist_product") diff --git a/evibes/settings/base.py b/evibes/settings/base.py index 74566bc9..60cbd812 100644 --- a/evibes/settings/base.py +++ b/evibes/settings/base.py @@ -2,7 +2,7 @@ import logging from os import getenv from pathlib import Path -EVIBES_VERSION = "2.6.1" +EVIBES_VERSION = "2.6.2" BASE_DIR = Path(__file__).resolve().parent.parent.parent @@ -297,6 +297,8 @@ if getenv("SENTRY_DSN"): ignore_errors = [ "flower.views.error.NotFoundErrorHandler", "django.http.response.Http404", + "django.core.exceptions.PermissionDenied", + "django.core.exceptions.BadRequest", "billiard.exceptions.SoftTimeLimitExceeded", "core.models.Attribute.DoesNotExist", "core.models.AttributeGroup.DoesNotExist", diff --git a/pyproject.toml b/pyproject.toml index 88d77ed4..74f04ba0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "eVibes" -version = "2.6.1" +version = "2.6.2" description = "eVibes is an open-source eCommerce backend service built with Django. It’s designed for flexibility, making it ideal for various use cases and learning Django skills. The project is easy to customize, allowing for straightforward editing and extension." authors = ["fureunoir "] readme = "README.md" diff --git a/vibes_auth/docs/__init__.py b/vibes_auth/docs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/vibes_auth/docs/drf/__init__.py b/vibes_auth/docs/drf/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/vibes_auth/docs/drf/views.py b/vibes_auth/docs/drf/views.py new file mode 100644 index 00000000..38d6154e --- /dev/null +++ b/vibes_auth/docs/drf/views.py @@ -0,0 +1,70 @@ +from django.utils.translation import gettext_lazy as _ +from drf_spectacular.utils import extend_schema, inline_serializer +from rest_framework import serializers, status + +from core.docs.drf import error +from vibes_auth.serializers import ( + TokenObtainPairSerializer, + TokenRefreshSerializer, + TokenVerifySerializer, + UserSerializer, +) + +TOKEN_OBTAIN_SCHEMA = { + "post": extend_schema( + summary=_("obtain a token pair"), + description=_("obtain a token pair (refresh and access) for authentication."), + request=TokenObtainPairSerializer, + responses={ + status.HTTP_200_OK: inline_serializer( + "TokenObtain", + fields={ + "refresh": serializers.CharField(), + "access": serializers.CharField(), + "user": UserSerializer(), + }, + ), + status.HTTP_400_BAD_REQUEST: error, + status.HTTP_401_UNAUTHORIZED: error, + }, + ) +} + +TOKEN_REFRESH_SCHEMA = { + "post": extend_schema( + summary=_("refresh a token pair"), + description=_("refresh a token pair (refresh and access)."), + request=TokenRefreshSerializer, + responses={ + status.HTTP_200_OK: inline_serializer( + "TokenRefreshResponse", + fields={ + "refresh": serializers.CharField(), + "access": serializers.CharField(), + "user": UserSerializer(), + }, + ), + status.HTTP_400_BAD_REQUEST: error, + status.HTTP_401_UNAUTHORIZED: error, + }, + ) +} + +TOKEN_VERIFY_SCHEMA = { + "post": extend_schema( + summary=_("verify a token"), + description=_("Verify a token (refresh or access)."), + request=TokenVerifySerializer, + responses={ + status.HTTP_200_OK: inline_serializer( + "TokenVerifyResponse", + fields={ + "token": serializers.CharField(choices=["valid", "no valid"]), + "user": UserSerializer(), + }, + ), + status.HTTP_400_BAD_REQUEST: error, + status.HTTP_401_UNAUTHORIZED: error, + }, + ) +} diff --git a/vibes_auth/docs/drf/viewsets.py b/vibes_auth/docs/drf/viewsets.py new file mode 100644 index 00000000..c2787d76 --- /dev/null +++ b/vibes_auth/docs/drf/viewsets.py @@ -0,0 +1,66 @@ +from django.utils.translation import gettext_lazy as _ +from drf_spectacular.utils import extend_schema +from rest_framework import status + +from core.docs.drf import BASE_ERRORS +from vibes_auth.serializers import ( + ActivateEmailSerializer, + ConfirmPasswordResetSerializer, + ResetPasswordSerializer, + UserSerializer, +) + +USER_SCHEMA = { + "create": extend_schema( + summary=_("create a new user"), + responses={status.HTTP_201_CREATED: UserSerializer, **BASE_ERRORS}, + ), + "retrieve": extend_schema( + summary=_("retrieve a user's details"), + responses={status.HTTP_200_OK: UserSerializer, **BASE_ERRORS}, + ), + "update": extend_schema( + summary=_("update a user's details"), + request=UserSerializer, + responses={status.HTTP_200_OK: UserSerializer}, **BASE_ERRORS, + ), + "destroy": extend_schema( + summary=_("delete a user"), + responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, + ), + "reset_password": extend_schema( + summary=_("reset a user's password by sending a reset password email"), + request=ResetPasswordSerializer, + responses={ + status.HTTP_200_OK: {}, + **BASE_ERRORS + }, + ), + "upload_avatar": extend_schema( + summary=_("handle avatar upload for a user"), + responses={ + status.HTTP_200_OK: UserSerializer, + status.HTTP_400_BAD_REQUEST: {"description": "Invalid Request"}, + status.HTTP_403_FORBIDDEN: {"description": "Bad credentials"}, + **BASE_ERRORS + }, + ), + "confirm_password_reset": extend_schema( + summary=_("confirm a user's password reset"), + request=ConfirmPasswordResetSerializer, + responses={ + status.HTTP_200_OK: {"description": "Password reset successfully"}, + status.HTTP_400_BAD_REQUEST: {"description": _("passwords do not match")}, + **BASE_ERRORS + }, + ), + "activate": extend_schema( + summary=_("activate a user's account"), + request=ActivateEmailSerializer, + responses={ + status.HTTP_200_OK: UserSerializer, + status.HTTP_400_BAD_REQUEST: {"description": _("activation link is invalid or account already activated")}, + **BASE_ERRORS + }, + ), +} diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.mo index 2846ad74da556048d645cb112cc3ffde75796530..1e48d9e075875efe53fafe82b4d682d0845326d7 100644 GIT binary patch delta 3387 zcmai#du*L$9mk)J_H?YfbRAnSl=Uft-Ad2gWV-v97f*g$4L|_hn&5n>{S9yiyaOth`yhWNURtMNM4{%H=)^ztS4#2a zkkpusa2>o0DuO4VGV(Ok`4^!gFF>XEdnLXL=du15lw-3=CsT6;#FS})b#N8zMNB)7 z%isfWDa^yw@FmEf`6UlI^arRKe+*Z^TEdXwTVMiqLFsu1%CQfi0{91%!z*b3@g^uc z+pEccEt7sWl$sZy3>|?|FbZ4X51~H%YiU2iLJ`!%tKkZ$3~hsQ_&&HBc0>Bk_;4}2 z02jh4lwSc?)R6yeWi$yJ>eeBw-v-}@S}!A!naS*ba4|8*YLRLp9GicoX~x%CYN7R~vi^TKIFQ zjQt%p!z$8(Zqo{7pbaXMcf(uZ4ybcQ_!{i}8I!|I`YG&ASkD!Zf>BkY8fORiUEgkbX1!;1c*0{1rS0<>0ei1*P~jY=ak|g$rr< zGDw2Q$DO5_><9G|S0Z0Plr~+HRR}%=V+~K0VQRP>f6B1xt+5$di`;;G2AP5=<(D9| zQ808{^mDG#;cQ?(_y?l5l+;k3pbxZGnpI0>XFIYQQA)QWYN8d$dPL)T? z)KE#*1+(x<-^2Xo(t6B(P#^8xj(iqTnpG=Z9gR)MjlnGZ;rUW&PKJZuhh|uX=&Ftl z{Vz}-XsF)&2!3jG#Mx3URqyK%b-czFMAxhWp)bvsk&Va(L__seb6R8`QjRP~G-!ul z%;2djdz;%DS+?LFCzI&fYhyN--tDC9;*8Ukak4vYI%8vbuF_r=OU08M*%QmfGB)3nOvmE3OP+)u>~xaJwA(aiUUB}^gHyIV zn2RM+#B|IPQ>wWY#TI&2^uw8d?z6Fp;&1)Sg%}5jO-_DlD79mb-HL<8yoBVJRl5 zao?E!*33PV+M)Q!jFGa6Sf+K;oo?H#H)bFA`@NIiu;1tRS%1KP)Vj?zb=NNTO8Z{H zKjgh?y`%mCt3CgKH|iho`wI^{dc$7P zJMNu8HItLxYv>zrcU9leT2grwi-E0A4*L7OvwlAc1AD=u`1R`LQ{0DZmux}L2tJI2 z&P-5hykoM8u_Kd=S?^R3L&4z7H~sySUK;nimo>Xy&DvW_@t%bP7{|<6;vg>r{vkP| zbP%{V;thq15ssWD#vw}{`X`20teG>bymvUvlT|GKLCe_#-YJXo!Dl8=_`lBJf^2)I z?SIz-MH34#W`C5>3sht%D&=ld?UR)hLZxwEZET%(g6y2)$Z)e;s69WA(8fv|dWNx} z_O+Xg;-366@D|rG{eS(58tgSK!t%unrHoMXGrT_J_qiX|UG1J|jJhw^Mcr5Gu4y?Q z^vQ@BH4K*31Rtu}6K_Fn@nGX)W&Z)rM^)AU delta 1769 zcmYk+e`wTo9LMqZ-KM+S+z)sAo!joFw)Uf@bI#^wm-FZ88kj~SBTP!2A_bx{L{Fqa z=^tUAhA4@MQV}XQzEBDV_CpsVh=jo%iezPfRA>W{0*jun+c)XM_x*i*f8FQD`}6tS zSl>ub@>Xf?h*1*6EaJ7G*{gUimlI{)bhBohk9z+ycHj_};{|*Szs3^$0gG`GBN)gt z%g1tT!6+7CAM#1kHgdsXn>neW?Y<*8llv=Jiq~-(-a%FPn}7cRsmLB;4d#T*_G2At zARk~i{)6h+;;`9HT!V$QZx^{J;K4QIuW?EHJI#3mL;p3PQjHR)H_U%3w>OcXfLaf9YI2Wt19hI`RzAvFtJBaPLA5~!r z2k~3%!A>es$9DM+V>9>1Py_iAld5Qp3-#;n!?+-3S*4sIUK|oepX8U)lh~9s^}haWb>;JBBbX6 zF2wioXWWKEWmCWV5l?gfCsyDIDx)nMMa}(J$n4rUuEz=FuqHlMN8?E@G_pR_+`NHp zcmmhqII4nKl~Ze=5jm`rlfLiAP8`A~F@+k)Ev&|SNS`gt{OP+|RC^mxQ=Q!FU!1`N z557bFu$t2$T!8!VQ&fuE*<)+4AJ^h>RD*X=6+gfwSk1=+_##Fzg=+A7-@lRHC#{Kz zCwsOVZ{T562ezpz+2yAZXAR{Qr#w=$+tt1Kc`5K9Ox;>CofNIT|fLW6pWP+{=4 zKo{Eo?3Qeaa(JVoELDfQP*14JtH%m9!;N5f1Lg(bHts_uka?Se$R2ewePx; ox^LX=`T@5k`b&tfE~Q5^N8RM?h?k0$2fVutX9M2lIY$Ej0&oAtX#fBK diff --git a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index 32dc97a1..6ccd61dd 100644 --- a/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: ar-AR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,73 @@ msgstr "معلومات إضافية" msgid "authentication" msgstr "المصادقة" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "الحصول على زوج رمزي" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "الحصول على زوج رمز مميز (التحديث والوصول) للمصادقة." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "تحديث زوج من الرمز المميز" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "تحديث زوج الرموز (التحديث والوصول)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "التحقق من الرمز المميز" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "التحقق من الرمز المميز (التحديث أو الوصول)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "إنشاء مستخدم جديد" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "استرداد تفاصيل المستخدم" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "تحديث تفاصيل المستخدم" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "حذف مستخدم" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"إعادة تعيين كلمة مرور المستخدم عن طريق إرسال بريد إلكتروني لإعادة تعيين كلمة" +" المرور" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "التعامل مع تحميل الصورة الرمزية للمستخدم" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "تأكيد إعادة تعيين كلمة مرور المستخدم" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "كلمات المرور غير متطابقة" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "تنشيط حساب مستخدم" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "رابط التفعيل غير صالح أو أن الحساب مفعل بالفعل" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "معرّف المستخدم الذي تم ترميزه بـ b64 الذي أحال المستخدم الجديد إلينا." @@ -74,7 +136,8 @@ msgstr "رقم هاتف مشوّه: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "تنسيق السمة غير صالح: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "رابط التفعيل غير صالح!" @@ -86,11 +149,7 @@ msgstr "تم تفعيل الحساب بالفعل..." msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "كلمات المرور غير متطابقة" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "الرمز غير صالح!" @@ -345,3 +404,19 @@ msgid "" msgstr "" "تنسيق رقم الهاتف غير صالح. يجب إدخال الرقم بالصيغة: \"+999999999\". يُسمح " "بإدخال 15 رقماً كحد أقصى." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "الرمز المميز صالح" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "الرمز المميز غير صالح" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "تمت إعادة تعيين كلمة المرور بنجاح!" + +#: vibes_auth/viewsets.py:112 +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 2e27f956bc88434558a96437f8b759ab553b8c18..8799ca9d41d57ee932a748d7bc69332da3d7a32e 100644 GIT binary patch delta 3237 zcmZ{lYiu0V8HSI+S&}#qJHatdLNX>Hsn-jez!4XYnniF|R1F%|fidHk@>U1rQicpk2S_4AEc4%b6H z-wkhs_rX^9By5J0@Fq9|SHLe}BWzt@%wo6^E|sh8Y!;%p18#!7@Cx`a%)logzRd}! zK%Pr^7B+GHIa~r8FtQr1g3|AXm%}@ua=91sXL9Ma4>L-}12hsx|E{1JQ!+OVU+ zm>uvJP?5g_$Kd-=4)!m?Is85(7BdQ^FTqauV5+aedalnv*?AkT!@s$}MiDRIluEn; zQX10JwcLFUe!hwI@5 zxDGa8{A$>~g!&(@V@ObBQJlj2W_S*+f*I1$gV(|vU^mo^9EBuhehzoRXQ5{3uMi*c zD(6RPLdK~-uyR6qw{m)`$}*(k#|Q=WtB=^N08Z$l-}Mbs+o0jL=|1{KHzWX9uafOs89SrP9_ zFFIfs@-0NY+KR}r)^Ha2o2vNI| zmH3a#CdD1d4T$=q-m1@9dywzOyJQybPWLMFH;^_&t=WsrF7d&-J zRWsMrbq@O8kXszXQu2sZu!G>JU(8w9b3!v%bnMXKw&xs;A2B&6@5CA%h(5T?T5Ef` zJdc#^&@Nh~Lf*G?){r7e4h%c_ydRxzS~j(6{!cFH83=9Hn~S_)yG7&wukNdqus)kp zVzm?wJ6`Ax+M(-v+35L&_bg3-~V6$wPBhbH;2ppPnp4cEifnq7xQfr>q*LCC)jNARk1N4b9Qx4X4&5 zJ#+)h^~!eM%^4C*8;delMIDPCZ7$@JR$OEzdSlV_73GV@Vd}xle_J%xRZ)GYQeY#x1KE4vdUAR`r$SY|XLigg4dKxV0`?(Y(B? z=Abz=9+v$yEP|-&ZKwgB+RAJgA@kOYiO@#nI$Up*m44CB>MTH1Q2Pw4|L?)|SYwsZVU#pDSoKI)A0T+P4PA z^FG-J1u8v3(8*ZDA^L4mNAr&>7rX44tADQSkGO+rzh@@@pWm$c>d3GY<>+zU1?9_848~vuaZFNloKdtoW|!%9@i=J+l{m9_~hu^Dy4E7*jOa3WT76D79Q zcR!XfK8|{jHjL{=?R1pcODxCFs0;JRM(2m45~;&dT#9OY1~l%1oJ&cPyVL?y7(_b}!%K8>2_CRSh@GMD{8l{$%w z*anu4N;K>{4t4zs)E?Q6`u))`_2*h^;e;+c?|Th(!7X(76u0Ag%Aw8l26bHl<=cfL zP!Dh(DW2UzR>9g)6F$LO{Oq3}meaiiW8-x6TGe7DEDxqbli8kYCJcL^7R@5eaiAwkv^0ve+o7wb))wmh!QJGysRiF*EmY+}) zhdHp9y#Ih9NWR{ZfQ=#s5fvKHs)$0On$W{()AIl3wc*~8^;dRU`+rSkV=k-rPv|Ms z#u76LRYPqA5hF@8pp7G@6O#xfuJzXIrsT&HN?yBPO_dmaT0?Ch zHU9X#ruAy@`$8Kk#XU%~|cvw?Rm|vGe6>j1s$%d;JSO<|GRrq_~9>8d8rcs diff --git a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po index ee1ff1a8..eddc4552 100644 --- a/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po +++ b/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: cs-CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,71 @@ msgstr "Další informace" msgid "authentication" msgstr "Ověřování" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Získání páru tokenů" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Získat pár tokenů (obnovení a přístup) pro ověření." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Obnovení páru tokenů" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Obnovení dvojice tokenů (obnovení a přístup)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Ověření tokenu" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Ověření tokenu (obnovení nebo přístup)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Vytvoření nového uživatele" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Získání údajů o uživateli" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Aktualizace údajů uživatele" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Odstranění uživatele" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "Obnovení hesla uživatele odesláním e-mailu s obnovením hesla." + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Zpracování nahrávání avataru pro uživatele" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Potvrzení obnovení hesla uživatele" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Hesla se neshodují" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Aktivace účtu uživatele" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Aktivační odkaz je neplatný nebo je účet již aktivován" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Uuid uživatele s kódem b64, který nám nového uživatele doporučil." @@ -74,7 +134,8 @@ msgstr "Chybně zadané telefonní číslo: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nesprávný formát atributu: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Aktivační odkaz je neplatný!" @@ -86,11 +147,7 @@ msgstr "Účet byl již aktivován..." msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Hesla se neshodují" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token je neplatný!" @@ -311,8 +368,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující " -"adresu URL\n" +"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující adresu URL\n" " do webového prohlížeče:" #: vibes_auth/templates/user_verification_email.html:101 @@ -346,3 +402,19 @@ msgid "" 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:168 +msgid "the token is valid" +msgstr "Token je platný" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Token je neplatný" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Heslo bylo úspěšně resetováno!" + +#: vibes_auth/viewsets.py:112 +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 972413c224481f7221d0e04af21d7f6490acf5a6..4a1235b2cfc754ec22a5eafce9eee103d12c0910 100644 GIT binary patch delta 3223 zcmZ{kd2AGA7>Bcc1TjcjmpnedVgo zMeXN?_kYT;b|GVtzxo-|4$ltYi}m?HV`jiF;3U|8kTIj-G^pp7!nyEHSPP$mHSidm z2j7Qd-~~7g)($piD4YQ=m#c+rhM-snXTt69GWY;2hfhL$o9Cbcc`@ZDu!{5Va5${M z$Q5urlztJs6mEdZ<#x!&IO#cnbqcn&ZnU4dB2%{YiFGZT)2^IS zCs=z*|0H1(MUBVnWHw}+%o?c5 zZiN)Z9B5~wo*ssp@*_|gzn1bWl)*t*lfzn=fwR){PN52ZW_`IysuspmgJ^>!TA zV4luHGh!i{a$Pyikk;f9l3SoTSsT}v&z`i!4ZUoeWm{3u;`-LK(9MQ!VYd~8 zmfh6k77Eid@y_zmWfS<`HORJ#1vi{ph&##`^w%@-uJYQ>uJVaxi<<&J>xHdYDm`N5 z?LuL15IPq2+{iSAt{u7j?7MrDM~vg<+(e@n;%^69lWpJ0@yH%KvO}ww&jq$)Wfe*3 zh23s07sPK@jp!Ud=%Ie=8zbBEdm_)UvYcdUsAGtHo%y>qlOb9eIJDi93dD zy}T5xRVXI8XN$R9Tm177uf0^1?kXj|x+~RJc~NH>lT_d$m1%6V3a;;XeltIo9_p!@ z+iH8c^v!&1SB$L<-6-_jJ*r_^V#lQfxk7xbq9#62adc9thhD+*{5^Kga|{WljYXNL z;)cpcYw}L175^|3zf<|%WqbZH4xRU3dc16aW7jWR9WNbveB%@+dYz+#nf`=8&xOztyMejfa z^tg1PEaJ56Vx-y2dQDW^Z_dO)b$+6+R2y^jII_AEV%zFE=|oP5&s5*FVSTCQJ$@3; z|5pBw^Nd+ns#JF(lszsRRXtpT=t}9*>IM?5~hC(hok_c0xJjW}P`(^M=bBOSjw^1|O_ Ct5QM$ delta 1729 zcmYk+duYvJ9LMqR*~MnF9kUx}v&~$_%x1G;!wz$qDFd!Fa}e19ied$qjd!;rXR zMu|{!sm(EF>#!@1hB9%0SuvKQzF&ov*oK*S9doc72jfQ!;tx#6K!RBkX5x4(z*Jm> z{G`KH(&1xGG@59G?=ehc{1As=560ss)C0fx)0|9UaADkznx2UX)3jGz|UiX*WTwa`nbg?0Jg zM^PJjf{NH%%wm4)rK1HT)1+WF4#Lqm6f006Tj<+}3T+EkU_0u8H?aj@;dGqLL$t81 zzI(8k@d?yM9%F|d^o)*H_72D6SJaImR-@}BsD*@aG_FAHa2IaG-AHupJC4QQsK^wu z>fso{rhwUc9LM+t;VZ!2An`A!lS$@iqI%53MpQDj(PZHPRPvoif@Ke|8lR(%B9_%E z)aghXSO~R|Lf<9GPi-e^o`b00pG_nFy5XXK;Tmdu8@1zmsAPJBP1wNQ^>_z$B!5s5 zNFj_GxB2cvMdSn~<2js)T}V3FC)5#qQ~b5EUR3DfGx{ekMUCrGD{Vzi#kM1BvE8Vh z97mn$6;$%QMost&^?Jt9a2gguMRKe^4kJ@q$6`9!bk<=dwjm$8PSc9rSc_HMt%ylc^O{B`yDNUMcZf&R?t10{#{4k~yr-zcA6a z3U&7L{qY2hPz(L>6r4+)LDkXKP<1rg#8m1qDm(UyUe`(L>HXLFs1#6VQk6(LOYctx z6RFC66@@z1>-C=>(e?6Y49=qFQ*~Vb7e!C69f7quR7F>19<@45GeRSZ{xo!kN;DN^ zs*1us+w1i=O1wDtCZWvDPF(5kCKg4r2POpE>ZJVWnWPIb?r6$#7n8cyy-ywCvV-?s zUvR%WGx$+-Q`*fyux@E&S)^fp!Q3VFi_jIO-wG^rFEesoT}IfQ$|#D)XBGuqdscq5 jJ1ZLF9uM2%)`T{@H8~~jO3poZDEF|d8UDph$?N+IZe^%J diff --git a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index cbbb37d5..b469aa75 100644 --- a/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/vibes_auth/locale/da_DK/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: da-DK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,73 @@ msgstr "Yderligere information" msgid "authentication" msgstr "Autentificering" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Få et token-par" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Hent et tokenpar (refresh og access) til autentificering." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Opdater et token-par" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Opdater et tokenpar (refresh og access)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Bekræft et token" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Bekræft et token (opdatering eller adgang)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Opret en ny bruger" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Hent oplysninger om en bruger" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Opdater en brugers oplysninger" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Slet en bruger" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Nulstil en brugers adgangskode ved at sende en e-mail om nulstilling af " +"adgangskode" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Håndter upload af avatar for en bruger" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Bekræft nulstilling af en brugers adgangskode" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Adgangskoderne stemmer ikke overens" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Aktivér en brugers konto" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Aktiveringslinket er ugyldigt, eller kontoen er allerede aktiveret" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "Brugerens b64-kodede uuid, som henviste den nye bruger til os." @@ -74,7 +136,8 @@ msgstr "Misdannet telefonnummer: {phone_number}." msgid "Invalid attribute format: {attribute_pair}" msgstr "Ugyldigt attributformat: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Aktiveringslinket er ugyldigt!" @@ -86,11 +149,7 @@ msgstr "Kontoen er allerede aktiveret..." msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Adgangskoderne stemmer ikke overens" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token er ugyldig!" @@ -312,8 +371,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende " -"URL\n" +"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende URL\n" " i din webbrowser:" #: vibes_auth/templates/user_verification_email.html:101 @@ -347,3 +405,19 @@ msgid "" msgstr "" "Ugyldigt telefonnummerformat. Nummeret skal indtastes i formatet: " "\"+999999999\". Op til 15 cifre er tilladt." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "Tokenet er gyldigt" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Tokenet er ugyldigt" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Adgangskoden er blevet nulstillet med succes!" + +#: vibes_auth/viewsets.py:112 +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 2ed9395924847a95dc196f23d775c09806427959..8c9a1a29c018786547620d3559feeb75077a7b36 100644 GIT binary patch delta 3462 zcmZ{lTWlOx8OM(s*LCeAPF$SSxsIDQb}rteNkfyCCfKnlacGk?ZJJvzWA9n-uZIK;5yjYY|IMS z19g5cybC@FJK=M%173u8!=J;I@ME|HcHV4E8{7zQ(N*^_X<_3*xCtJEi{aN{6MPnO zw>bx8$jdpez@@A|g6*&sC2QdtsQuk=5j+Ux%j1wgQ_R;j*d$kDCVKHHD9_Hrr{RyG z3wN{{b1!@W%JSdCG58MD1&0=LIeY?Qi>W~E$8ZlklkZQ%M%KTE((^mGp8L()Ol0xR zyrmGYgoMWIfuDnip*;8&R79SKI{y-s=NF+u{Cdu-a2f0WKpD1_a56QkAy=7A@K(4J z))8}v$7kS^a3hT2F8CeDpZOCH8T1}hjz5Om;Bws1#Y518B`7_=g);12Csz{v7ykMhq~yyPzrtoH^DccUi@di-^4;5bizB}HmC?4g);bYSb<}Z zx-)OV9{4s~4_i^b8g6SR{zn@q5;iuoae>=+!aqX2(1ts=!<|t3k3rSS^H2s{f~t+* zK&7sg(wE^|plYcf%E8B=Y9oeUf^~>3=2x01r&pmoco$0H-=W&4n?%aeCvrXwRaEDo z+V9U$7kmh%X9){=yc}xnKy^jP0rC=Q12EPqe<*!3jm@7~Qz6bd;AMlU^ZG=k^>*BE;?uJ(VA287c zZ$c?}A1aqE#C;bmKnIrLS@;Z04O^3a>9)f|?C*n=fjI{`VtxSi{uQX2Y388_^+46m zop4p1$qIv&bd7Z2x)9k3tyEV3Tii6{~p_aN$788CN{_VjY?DUEVu5ZQ|GuOu~O0aRo) z9!6A9NB~HMl|*!`w$0F@v7zSL^N*CkhbSi z<_{#jOB8+3=s zD^0r^btXC4)HyZXbX&uok(yuff-y8@N1Smt3{Ta9qJusgnUTP{k>zLKo=T6HqOIC= zM=vCQyUFQt{bH3P6K>=NPCQ<%xkaZWOR^WrHd))=Ikl$wnHvraN3Q43nmz7%fvH`) z_lZBKo^dEs8AoO7N8X4Vc{RU~ywdXMEt#cG7^jYx;%fDD@lZzLlpnK0vmvu%u2;?998cWVRh@y20?$q;fO&k2mJn3K%H_A<`=;Rz1JscwywQn7&+%yxfpaxo~Q1$=QZ_zYU}5?{PL)EenswI5|?GXeVVe zejdz98GGlO7n(uh;8W5u&l#f~*RNU>=0DDESEnz9BNUw(?0rD#JyHvj=Jt*aeQCY- zK9bk_^yMJEW{yGb+%tAG)4xfy= zk~cce)CtKPla%3^+Q9X`xKs+fGz@cVXdL5-^Yu(Dm}~Q~-}*kEmTU9j6ypWKNICiH zvW~Tr@z`}zIs0ldv~2sjzTqHNIjdj?vVQvi6emwDdw(-gNNat5eHlgPll{Ev5^woy dtLJn?u70Kr=)S4-x3)HPeri8WZS7pq@IMWstx5m@ delta 1746 zcmYk+eMsF^9LMqR^&#C|dVQGQe7@Qq?tGkPK5UguGrj7JT7%d|r4;H!H?|QJ*bOPD z*gtj}`)8{^*7lc#;|>zCaI%bv5UmD6BSsOy8hd~!1CidJpTD5PJ?C|Pzx%uAe9!ls z-~F|HsWJX@PRePc#Hhv8*OJTza5{yCvg;wUN~}kHe;6C_P0Yj3u?VkX7T&@TKEPZI zq?rXV534YOnb?Os61PKi_}CzgCOYDK8nd~c#~i$lsrVaez(4%!zmS1!4GS?j-E0C& zQ42YXdvF~U*zQecW7vZk%x|-FHgjVU`Pg;u3$vTp#`SIgekHRiDUGOsT5&tZP=Ox9 zM{yDr=tWdu)Bg7f)Iz>NWo!lWncx1TqX0J3WMCK{#%=frHlR}0>w6HD+7WEP3Dkfy zID*Ug1U4~<0z2XR9#(RF2DOj{jBB88=_sOQ;pTjidN3 zl3lxxQTzv$nF^vV!59t(%!aU<>m|~+75@&A{}wvMoE%MX0F}aV)Wjd5_VfaVaUR(X zTfsj31r=x=jZ(cA6<9ZF&-<|%KSTwx;Cl=8{CYO|SLCV8rW={aIkG&|#3gtMTksvc zjnCmIX=85t5_NwW8PoP{*|`4-D$rv{GVCpU65mJ7w}{$;@8WbA(|*LA_&aJZvw62_ zu?9IFb{N?e8$xB`B%kAsNctXY4zYBw&Dav z@C%&66?`6#Fe|ay94eLHqn^KqTG3ASPg~ePqyLFs)D{dQkJx9($L44h=nbsX`@c#@ z14IkVKE`^~N*6JTKcF(PhNW0Vw45a`D?5+{dJ};L^bS_NE+~yu{icc9K-Jmc|II5p zh??J9jrRP%qVy=zcK^mM-^a0w+U;N0V2rBOs5DbMsoG}+zMHDoP21B#C4O%q;BCcY z>gfH~0a1xipQiGbcy9r3iI-w!M=4d&Ax-vr8~*|9j&~5Z<6deR^(pHAi(YA+Ep5Xy zRGkl%XQ{1iH08RY=ubm?tn{ns;Hc<)ba=guMh7;<-AJo*9qEVMZ2FEwcvD)yy&Nn{ zoC}^$a#I-xTvFz%?q+7W3x~dPYoQO^xvVRRvFw>ZsQrc5i?RLPkE-PG?)IH!n2^J*Y2yabx$wg!C)1paNQyzBrii=!r U$z9h|`gI~&mL5p-L<$1`0<=o4(EtDd diff --git a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index 13771dcd..1e801529 100644 --- a/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/vibes_auth/locale/de_DE/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: de-DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,11 +46,79 @@ msgstr "Zusätzliche Informationen" msgid "authentication" msgstr "Authentifizierung" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Erhalten Sie ein Token-Paar" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "" +"Beziehen Sie ein Token-Paar (Refresh und Access) für die Authentifizierung." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Ein Token-Paar aktualisieren" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Auffrischen eines Tokenpaares (Refresh und Access)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Überprüfen eines Tokens" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Überprüfen eines Tokens (Aktualisierung oder Zugriff)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Einen neuen Benutzer anlegen" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Abrufen der Details eines Benutzers" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Aktualisieren der Benutzerdaten" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Einen Benutzer löschen" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Zurücksetzen des Kennworts eines Benutzers durch Senden einer E-Mail zum " +"Zurücksetzen des Kennworts" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Avatar-Upload für einen Benutzer verwalten" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Bestätigen Sie das Zurücksetzen des Passworts eines Benutzers" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Passwörter stimmen nicht überein" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Aktivieren eines Benutzerkontos" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Aktivierungslink ist ungültig oder Konto bereits aktiviert" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen " -"hat." +"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen" +" hat." #: vibes_auth/graphene/mutations.py:103 #, python-brace-format @@ -76,7 +139,8 @@ msgstr "Fehlerhafte Telefonnummer: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ungültiges Attributformat: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Der Aktivierungslink ist ungültig!" @@ -88,11 +152,7 @@ msgstr "Das Konto wurde bereits aktiviert..." msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Passwörter stimmen nicht überein" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token ist ungültig!" @@ -276,8 +336,8 @@ msgstr "" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." msgstr "" -"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-" -"Mail." +"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese " +"E-Mail." #: vibes_auth/templates/user_reset_password_email.html:89 #, python-format @@ -316,8 +376,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die " -"folgende URL und fügen Sie sie in Ihren Browser ein\n" +"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die folgende URL und fügen Sie sie in Ihren Browser ein\n" " in Ihren Webbrowser ein:" #: vibes_auth/templates/user_verification_email.html:101 @@ -351,3 +410,19 @@ msgid "" msgstr "" "Ungültiges Telefonnummernformat. Die Nummer muss in dem Format eingegeben " "werden: \"+999999999\". Bis zu 15 Ziffern sind erlaubt." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "Das Token ist gültig" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Das Token ist ungültig" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Das Passwort wurde erfolgreich zurückgesetzt!" + +#: vibes_auth/viewsets.py:112 +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 57ac38377b84170d5fb29c9690baf72ab381b175..13ee0e476f65b16a1f1684ce198d7bc8d0354a59 100644 GIT binary patch literal 7770 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 delta 1729 zcmYk+ZD`G57{~GJ%wZ4qbZk50oHI60V;h@e%skCA8)aUIY$;L)x|7W}J>%Q*m?DhP!6|r}t{GGsx#a>~M^=*(FB`}gp2IgZrPQuX`MU`x|=O$EXTQG_TQ4`+67JQ2HaW<1Eu|1y0 zu!QHcsEu@EOcV8Tqs-o5DSkoyVTf$>z6_N}4Nk(1s2v`{9e5O}u6@NR_!Cu`@nl_q zwbR)_1A=_c%dDg^FFwQYNl(bW_o~XrW*cQ&2$Bo*jsGH z&&Z~&fh?)MwIFR{`%v#yX7$oZ@BK5>5xmp~ny4RDvQLImPU)*D1sF6O81tZ6wI#bVTin^4WPAJt3)sD%qy zMV6yVyco5Uov3+sBXip^oQCI7zyBDO@M~0MKO;R5vlOM3sspu zR5SfVdMR;i#YkR>BLOQXCK5CBz^Ej~60-?yPV4ahEiuXxSI%FPs%icWWvfyx@m^GT z&cc<%D(_jlt0l&J&sDgbSU@Q8xr8djE^Q7mhL}!hsKPUKqwl}YNu!WhMCe@fk3{EG zO{g0B*Q=o(7?!vjDmPV3d{b1R#l$#bA@TpvH)Se8;cOY9{?J%KRI4kC^u*9P>+IAp z8tPyTo!8RD-Oxqn=yxxY%iYqH2GdN(|j z4X!N^b=M1S{RMB3rk?-+ diff --git a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 158da31d..712ac2d4 100644 --- a/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -3,12 +3,12 @@ # This file is distributed under the same license as the eVibes package. # EGOR GORBUNOV , 2025. # -# ,fuzzy +#,fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -51,6 +51,71 @@ msgstr "Additional Info" msgid "authentication" msgstr "Authentication" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Obtain a token pair" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Obtain a token pair (refresh and access) for authentication." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Refresh a token pair" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Refresh a token pair (refresh and access)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Verify a token" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Verify a token (refresh or access)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Create a new user" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Retrieve a user's details" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Update a user's details" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Delete a user" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "Reset a user's password by sending a reset password email" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Handle avatar upload for a user" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Confirm a user's password reset" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Passwords do not match" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Activate a user's account" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Activation link is invalid or account already activated" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." @@ -74,7 +139,8 @@ msgstr "Malformed phone number: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -86,11 +152,7 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Passwords do not match" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token is invalid!" @@ -345,3 +407,19 @@ msgid "" msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "The token is valid" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "The token is invalid" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Password has been reset successfully!" + +#: vibes_auth/viewsets.py:112 +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 89a9d3d19a45512d294e581cf991aed574632503..7202e09068647e86fe6bbae377fb0935b26378b9 100644 GIT binary patch literal 7759 zcmc(jU2GiH6~`}y(#G@yXn|5bdL0TRB)d3q?Kp{PVjIUMqy^0E?$|r^?9O&( z)+P!r52R1L^q~~B1+`V5s;Z?gv{L(4RH@&pN*|!Akf7qBkF-@qt0MLHzcahuU9S@o zAu;lu-^`u+aqhY2oO{-y-}~a~pgW-UKiCurZ&8 z+o0Ny!#m+)@LKo`yb8Vm?}opG*THw-P1$e;NOH_7vNsQrBh4#R6$gyy{;25=E-oIgUz^(K`3Z$rtu zo6Q#wL(Ov%UIWiS>E$`7dA>Hp7gJA4~z{H-iX_I(6u{cBM6{VbGy{}4(K zZ$d;g7x9rLn=7H#vlU`W<}Rr9j6%s-gWAt0pzQl8C^??a`4fo9=5;82{1eJfFJ*I8 ze+$&U?txnWA*gwd=Io`Tw7R_Sn1pPNISHlTI@}At0ksb=L&@_7 zWJvRGI1DdmQq4QgP4>M2HO{Z0xHrJRcKsJgB36JD}$SVDi+l*Yd2uu#g$Le?u1Cq#E)-Hn9fbV{^eBEbka$v zR&5Z~Z5Y&-ZIIX?Uw*cR{-U3ypH}4r*O*Q%#;a6P+0z8ZL$O|LN?z#I%f2c3 zNy-#UUR+6b-cyPX%vF7R^R`ADebFzc3w5vNZ%=IMd$o;C8F#a$p;ulGgM=;27g*}8 zNlZDaF9vaKeIFWLlB`B?#Vt8CWsCvK@@(B-bz5aBe(1XzZJhCIUJx3FNHRIiQXDlK z**!5;uU-l1?UrksjWF^mveJAyQ}x3zLVOLius+E4WTy!ht(Jyer)-c{idKAEiTuRY zqtqhc@=n_beJ?@JQ3GqOS1h6YMx zXUCK_n}KO<1qarO5}yU6RqQ(UztqGY+RF=;>ar&H&1t)6f?6YrQx9jwxctPlT%l2o z>b|WvYb8I+hWkAPl3O_rXJZ$ zI*`R0YGiq~*<=^Wp%>I_L!ORer5eRb6O~ermsaRhJndJv9#dtBOrW5enR=J&7Y)9J z-?)2XqGp<~krkP0K3{K5V!B-tdv`9IMUtLxNz=`|*bKu{?S2W4KKqVlqDr%zCY>Ls=QTS^x-`_UvagDY^iOsv~wTUH=(d!FF58UY_twCfG!#a8HQot;?(%FWWU@^ToI zmo-913@rIL;D}L;GnI}*u)ETw1+Gfg&DmPI>&}8-FGm%&(b@WHHA1C}eyk{<0b9{s zF5gUwrgwtDtY)F(1ToEe!ckC8834Zy>I7e+JHG8s2&cfz&l1yYC{S(O1b2iu7i@=i z|8Y(%BnL#jfmF=G^wuW;PRALnjGG9ih_Zv8o}vWmbJ#^)NR%4{{L+cy#ex zn#~Nh%R<|x(C6DZ3}H1$syg1yX%`WeiZip*_fL$^EliCbn^?0?*wH*Q;~|T8n>Czu zE;y5){N}V0je zSxXt4pPGKq-ZMTuH8(mwci*A;*$HYUXN%+0#}3dfJ6H;Hq>;{(Sgk4UMCy-L-w+zN82Xolv`R<;WBj?ETk8GajPrk2t z{(Cn&2VmbkpBa=DTu`1r*^}qDe(`snY)UZ5>xymFFMp$@ACWI~Bme)S0)gnW^49Kg$?Y?{bKUICnFPdqW?Ynzorh9YyjWvmB9m9FH(3S1CzqLbkmNs;z{e$fhdh-66 zj=Z1eEbn&#aK`;^oN~rvW;e_Gdp^*xPvYONvahy^^uN%=KkL~}^0U{jw2HwuOZ<_^V2WenE-`eY$>&^&~O~milj^tmB nn5SR*pMN?>`ma_=&p%epiStkYbA!nIxXXsmVGbwWpY;F#B@KIO delta 1743 zcmYk+S!~Qv6vy#1ZE2NuIyGADR5!G=mYUX5Td8%BM$p(Ap%H5;67}GL5g|f|$c-XV zl?d@5(wGNc#1b^IL`VqQ;Kd6f#1h2z{Z0Q8H$DH)|No!%-gD1A(+3k!#cVs~qc(B^C*W^XV&i+6 zHQ^jgV|}~KO>bV@Mt*m>{s z7-}Q8P!)TMS*&lLxlsbWxujt>_QAo}AH%4U&GlS{D(!j<<95`9?YJKA;Y1w6BuZ?H z=N>HM`6y~5H!!M+I=E40omh_VQGb|AHhMn{l}HT^#wDm7?!b+>8>y~+z#;e@RheS4 z9)J;S^qH+iC2)uGX`U~B>aS)B(K%|S`KX<&K{eAZE-JM{C3+eumR&+6dIMFN_o!0; zLfXKR$X*Ne@f?fVP$L&@s2R0^y#ea42@iTNj-e(xiE5@ZsAjr`YNpBjwVLS^DzPqX z!gt7~Z5dfoeOrgLjWwg*??Cm^0q^}i)Db*U{WVc1s$_358#9C5%~XcUv<{WnA|w}E zj;v`-sEX~xEIffqAck7_Dsq~3A9aM!QR{s|RW6!H-C5HzF^nas374XpX)CIkUZNJx zV--09RpKeAooqzSvl*G&cH?k7j{5x$RKm|tm3@cwK-7}iu68&a)l8MBW@YXS z9-^A*8`4YhV=G1SiXREsNMaB%N)L=GBA*yTXmeVJ|8MazEPmzuHL05B-%z$HRjv1; z!gDmvB4&Hf+FgVw_MXS$3}Ol(eoL27=(pS2! z^djFD7YK#j9RGgz)4$KPW?YXo1=@Z7+69qCk%hAhXVlG_hpxEqMOPeL?M?+tV}F87 wHZ!ZhwWj9A+OiHMxM)tj`;oKCJ, 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: en-US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,71 @@ msgstr "Additional Info" msgid "authentication" msgstr "Authentication" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Obtain a token pair" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Obtain a token pair (refresh and access) for authentication." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Refresh a token pair" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Refresh a token pair (refresh and access)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Verify a token" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Verify a token (refresh or access)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Create a new user" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Retrieve a user's details" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Update a user's details" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Delete a user" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "Reset a user's password by sending a reset password email" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Handle avatar upload for a user" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Confirm a user's password reset" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Passwords do not match" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Activate a user's account" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Activation link is invalid or account already activated" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "The user's b64-encoded uuid who referred the new user to us." @@ -74,7 +134,8 @@ msgstr "Malformed phone number: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Invalid attribute format: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Activation link is invalid!" @@ -86,11 +147,7 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Passwords do not match" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token is invalid!" @@ -345,3 +402,19 @@ msgid "" msgstr "" "Invalid phone number format. The number must be entered in the format: " "\"+999999999\". Up to 15 digits allowed." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "The token is valid" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "The token is invalid" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Password has been reset successfully!" + +#: vibes_auth/viewsets.py:112 +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 e19e9410cb37958584b81e0a7a8e21d579b24ce6..92e8c7591f40101b45dd19108364c2b1c35be4ed 100644 GIT binary patch delta 3359 zcmaKtdyE}b9mmft%eLJubhohGF3>vd7W!f@+FIy>rIux_v`}a((9-2`cJ5hs*n4L- zGj|r&Xl@J-O*8~EA|yaUHT?ra(vXc05<=94glKAv{v!w^JOeSQf1rspHv0L_oxAPY z>dF1h=bSS$zxSE@_?B<)Y`n9q?FqveK`ul7wZNDLeCvEJj6W|lW+Qw9_QSSC##{o| zLp?tPzX11kFLQI)Wa0T23 z8;IG*|?|@H4mxz7F-`-;4cr7K)$`UJf@yW#}N3!}q`mScCMP zc>}J8@4+izC(2jC&CAID!4gfv#^>319_s_}O{mBg5snAf!p(3Ps#hL_=rT{i8{tpk zI`}up&-8KxRDvs^3=Ki`hJ{0L0?N^24JNATD^L-<2DiZ975q0;hPI$h5$}Q9VFk*- zkGUvgFBLovrSDxReIFO=6HtNu1FD4mC=Fp_JCi$@ya0E?^RS}S55tGyK}gok+fdDP z0;-8lLPf9;ZOXuMs8k;=Sb?ip*Wgv~`)~t%8LG)Yf~aVi4$hnu^usnd4t3sZkiIb~ zRH`3=D$$b#Ux!NVXHbTFsTavI9#jdghH_v}vA!SjGYu|ZfKS5-o&V!Zl;S}?XW~A% z8U}D1{9dvDDy*@73z9{%8|zBFg?nHM3CjE$O3z>5)$mie25!U~1$GORgSW#0o&Wop z$fKvA2Y(BB$NUv4Rg3AkG8}-4bOfqI4t^It2$iXl*X-_YsFZJmq}YtZ62$MhvA>u# z!~?}*E4%@b*E%MOUJhtni|EYCfis69RzGOmj9iBdBPtbtCAs70L8_FGuW?lt)QmWp z+t2?%bXQRmbpD;zT1QGLK8PGb1`(zDPGldVBe@;XP!AnOZbQ_V>IDs|n}38fzXnmW ze^rZoH0|df2d(!aTM*T!3sIUibTYn@&zdQ{y_jDPuSC=@Ivu-^*3fz1T`W|8mFU06 zNQE68i%rOv5jBp+t%%OC&M@UQcOg5F>k*A1LHD_P2}JFZsxaS1MOG! z-{In5Y}&J4J(_T#w?1}bu}j9iDE6%HyCm6A&JMR}dO7o1V!= z+WTf^+t-wK_)$0(#5FWEAMqw_k~|Q_6%T!`Zv5EUy5n}}9>^at6<2lnj$X(>? zVWr9=Q?_nnFP*GLw&IP+ll+C51&fX@xOKE{gK*B@NgKo_I(zSQAn0sG($tmK$6Z(t zd|MBqu$&$3xbvc>i(ZoE5s#(S>U8#LN6=`dqLrK6Rx3YeZl2Rv+2nDbBOjyFUgE+^ z5PqGT&4=c4{ww)3*S*wy2}O(}ClVk?dmRFmvjXHWKn&gc7^l?xIt2&Zf{ zs2Bn)%E@NFm2F+}SkGjoS%7(JvR^HE^}?xnO)&G&1uvG)cgeu;foy2$FK^0QgnUtw zu+=8kucz4hhV_Hlnb3=xDULRj%^~ZJTbA`;%2pz;YCS(C-?m&XXD655-8;A8Rh$&2 zNowOD%Jy~*u0+r2+tb!_NqzQ6OV`Z3UDKsT-ekDqs!Cnmj#ix?)B-F-QmEIXupZmQ z&Aw>on=nJPU>-!6x~ZsT*$h`v5H{}=-k6~%j$MQm=htH*4E)IKjcTLWiSDj}T^Oc! zcms1uIvP}ROU=G@$$YCbr@B90a5ru1LYEt#JcnQV^Y1`W z^m#7Nc}5&f*D5Zi@cUckAk6<)2G5040jDzRRrzzb<|jH^-Lp1(zh{MH^?v84lP*@S zBQk62y3T8ylRdNRnnxf+4-G$ighLQf)}mQY?`1D7|M{9TqW&K$XTsjT(z3JLe&*2? H9i{&OmP>_Q delta 1738 zcmYk+S!_&E9LMo9qjaI2mUgDbXs4x?)-u|v7FBIkI~1`-5YduYYl#OuFd-F$2XZ2P zQ6a*Uh?tP3i3G947DwvpfEY+{paFAPz_}WU>_>6 z>B+{l;5V%+VXFJx8~r4)6e3LJw`RH8d^6dpn)dI^=- zW%v6yY9aSf6?=t#<~Kj+D1pHoQZax-umH2M7*(?QuB%X`-HgS!A9cg4xEY_|Of2Ij zN^H05VJu|ahFZuSjOj)X=qR(-ScG3u7Y4~j=O>^NslozWiCW8jwW1$W3dS{@fiB?Eb2zrk*8svV=cZ#RVI&% zRq6;Tv1wR>m9D!m!1y9+AvaMAf0;r3bzwIrbYTx_{0oO;A8yBN%CG{DU^Tu&J|@gv zTCoJl#dILmHxH2_nir@9Kj0kfK~<`Z)yb+Dog6w1I2kwMcx*#$rrW4z^$FSFrW>{S zz9YFAFYjOkGf@?)L)~~i@-f>u@KbXLHBXy6zJaPp?6KSVh~=E%8CK{BAUAVzp92t5%}LgdQ>fZ%&)w9C`lAN-Ox+R8~z? zQ_K)wFZBM@)Z^^jo@zpGeE{iU02-hvFZ$z6vtiz7ZTw~8=M&emni#_(4 ze@sHdj%`i$e2PC_8F=con}W@@H`r, 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: es-ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,73 @@ msgstr "Información adicional" msgid "authentication" msgstr "Autenticación" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Obtener un par de fichas" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Obtener un par de tokens (refresco y acceso) para la autenticación." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Actualizar un par de fichas" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Refrescar un par de fichas (refrescar y acceder)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Verificar un token" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Verificar un token (actualización o acceso)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Crear un nuevo usuario" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Recuperar los datos de un usuario" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Actualizar los datos de un usuario" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Eliminar un usuario" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Restablecer la contraseña de un usuario enviando un correo electrónico de " +"restablecimiento de contraseña" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Gestionar la subida de avatares de un usuario" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Confirmar el restablecimiento de la contraseña de un usuario" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Las contraseñas no coinciden" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Activar la cuenta de un usuario" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "El enlace de activación no es válido o la cuenta ya está activada" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -75,7 +137,8 @@ msgstr "Número de teléfono malformado: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo no válido: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "El enlace de activación no es válido." @@ -87,11 +150,7 @@ msgstr "La cuenta ya ha sido activada..." msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Las contraseñas no coinciden" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "¡La ficha no es válida!" @@ -346,3 +405,19 @@ msgid "" 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:168 +msgid "the token is valid" +msgstr "El token es válido" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "El token no es válido" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "La contraseña se ha restablecido correctamente." + +#: vibes_auth/viewsets.py:112 +msgid "account already activated!" +msgstr "Ya ha activado la cuenta..." diff --git a/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo b/vibes_auth/locale/fr_FR/LC_MESSAGES/django.mo index 5b53f80731699b2d7f126c82c80bd99e1088dea8..09504c81ba17586742f4068433c3aa98bb400461 100644 GIT binary patch delta 3369 zcmaKteT)?49mk(VSdc^E4(^UaYXuRcr(EkRFLFR7dgJc1Ft9tbnVCIG zOS>kt*0e@#r?yF@iMAne(?n7)js2^!F2*LN#@aL~eK9F5f0#5Or2V6|HRBx%xB||cW6Tn` z3hMh&xE@ZxKKMNBhNs|X;hXRV_z_$H`>r)+K3oGA%G5?CbJ=(h4#Iu#diV{Phu?$P zHZMRq@{^43z)sd5!Yl76@pYJW4l4sM5vc<`rsHBsFFW+yr+)MerO{M!paA{g0p`KLwTIH!{8tdszPm%CSz;$<*8gF=YnfVt6~O zBW4GWMQ{SHfi<`Rz6kj@MbHOV!eOWk?S*pqQFs_uAbn@f zz*X=pycu?&{3bZuMgI5ZXc9JVVWWZdTj3cf#T|sBlH3Z1;cmDbJ_Y$RKjm=`d>szJ zJgqOshoB5>g(}5kP`xn;x5FnOv6$c1nW&~`p}PD7sMKG`ILK+H#zHCj3J*2accHG| zdr+A;4;ASg(kVTiP_$6iuWS>kPXOv$R0!~A4cv(H10+oLAE1mM3q28CE1kD zTK|y7nSVZ8x9z8C*4~52Z3x#n?RuqIV=J;Powcsp?rg5#h_whAPHQ`s?F(w+d$aX& zs9SaU*k5EvH5)|kLb#3T(3Q#~vk=6&SLs)h8rsxKZ$ z*5z+mF>XVzbkuR3I5=#5XH{rRp^XkYLFl-Jf{mipL&+ogCAnoh_s?;iT4ck4C^?zm zFjLle#>GU>){=+vs^z%4o@d6FKOnlb0(jE5eNUC+PhZ`Jie6I{9XaUkeyN7B+& ziw{~q_6lz71^!TSa_*jmEf<}rmPTBvmCHwyf6n#ltyHvgliF(MXZq$(4&q9%EL-s$TnFKL3Q(t`+qN?qo&VaN z@n(Y_@hm0rokKPb)Fy5zbepdf4th~!E9BD&YD#nSWg5ne2epVY+AllBX5&!vMc%~T zWV7K=-9k{Q#&&3EDEV;y#FC2}PH_P3wb(0r5pLGPWcz|m{V4tT3me6k>6@|(p3Tip z`;HF!arerxE7X|Lu-Rz2?gzC=Tb^#i?5b6(p;u|WpKkm@=dz7s#LXKVh?|Xavr#zc zh6h@~rp{)4S`BJxW~LpV>g?KfO`TS?zNdGV%ix99DcV;4BJ&CFu9jRIx0CCn=E?(Z z*2blFBb(8nQlZ&xdy*XJF5Ko+0+J^C)QJ{qHi*R`C7$oa9^DeLq*8^n`Kg|>EP1Q@ zg?$&xdv*7Be)9Y2A%srme4}VXeoQ8M`qy4jC5N9L>rVzpT{?+AD3DXSzKrY1$?g@2 z+p~4`PAX8VwrdhO#lZI|EtAVT=cS&%B=7bvUS#gi^6jW~(u-h|W4)(WK49aRa?qHE hRJ<}u3IRV=muO7n5ePUr128h#MVnoi;6}mULsyF zh$7V@$QTr@4=VJbNGqNPeGxS_wUmM&v+Im#4`LD^KlrX_yUVC z6gG=s3D#f|^RN^7NZQtM!^<{v(L&vU{aC>G78c@t9D{$OCVUc%Un3LQ2u{MxY_mR0 zpf>UyeuVE)fz8h`+lk9Dm-X#BH{*El3-Yr2{u^dP*uwaq;CVHxDk+VqiJI{POrZkZ zgH!MjD$wsyfn5&X_fQ)dL}ly&ma@LR;zj|C z!$@}RIZnqnsLWInbsST;Ib^mK>lpt=`jn}+QSz@HB&eKXT!mG*1-0-A)C3o>6mKG@ zVSnOE97bMNPqa#P8&U?A!e(3*cpO!%gQ$5Pq5^(dK>qcGcRbJpnXIaD1Xb;Y=&%lV z;T>$p2GXV)*pJ8Y7%GrbcERSY3KeJ*avIixpJ4}*1UrX1f*;b{FsJ>5^*Dg4;#a7J zqJ*tTzeG*gh5CFq^0GcIjp$G*{}r|1zc>-!p>|xtC4sfbBkKsp=}p{J@Zcb};ziWi zJjPxO$4Ddgp^EGtYJw-Y5JMD(7HmZY-iZoiE6%|aScQX_#HXkl$s@Wp{r=~2L%rF4 zJc~z>)38crn}Lm}i8i2)q#vmz|35$zD;WL0)l^(l>B^*H4|p7c-B}zU)J~nld?C zH~RgnVAPWIR=NsAN1y_0rtAE*b2Yz6M{oWA08Ys-Jf-{-dO2Ok^8Z%DK$+ykY%yKO zrM8sb+`^?oBbxp+s5}2SG*-c>k#Sq(-;G{WfLZR3aGhI}z0O_FuJU3z;gH)9DfiAt zE@ilrxnH=9ye>DCSK(sO8*U`}jXR%z+uK=iB@}I2o%%erW?6E{r|q5SDvPeU`r?hw zE1vDumTU{TNGuU<+r6uMckf, 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: fr-FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,75 @@ msgstr "Informations complémentaires" msgid "authentication" msgstr "Authentification" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Obtenir une paire de jetons" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "" +"Obtenir une paire de jetons (rafraîchissement et accès) pour " +"l'authentification." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Rafraîchir une paire de jetons" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Rafraîchir une paire de jetons (rafraîchir et accéder)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Vérifier un jeton" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Vérifier un jeton (rafraîchissement ou accès)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Créer un nouvel utilisateur" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Récupérer les données d'un utilisateur" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Mettre à jour les coordonnées d'un utilisateur" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Supprimer un utilisateur" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Réinitialiser le mot de passe d'un utilisateur en envoyant un courriel de " +"réinitialisation du mot de passe" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Gérer le téléchargement d'un avatar pour un utilisateur" + +#: vibes_auth/docs/drf/viewsets.py:49 +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:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Les mots de passe ne correspondent pas" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Activer le compte d'un utilisateur" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Le lien d'activation n'est pas valide ou le compte est déjà activé" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -76,7 +140,8 @@ msgstr "Numéro de téléphone malformé : {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format d'attribut non valide : {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Le lien d'activation n'est pas valide !" @@ -88,11 +153,7 @@ msgstr "Le compte a déjà été activé..." msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Les mots de passe ne correspondent pas" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" @@ -230,7 +291,8 @@ msgstr "Jeton non valide" #: vibes_auth/serializers.py:196 msgid "no user uuid claim present in token" -msgstr "Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" +msgstr "" +"Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" #: vibes_auth/serializers.py:198 msgid "user does not exist" @@ -278,7 +340,8 @@ msgstr "" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." -msgstr "Si vous n'avez pas envoyé cette demande, veuillez ignorer ce courriel." +msgstr "" +"Si vous n'avez pas envoyé cette demande, veuillez ignorer ce courriel." #: vibes_auth/templates/user_reset_password_email.html:89 #, python-format @@ -301,8 +364,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account " "by clicking the button below:" msgstr "" -"Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte " -"en cliquant sur le bouton ci-dessous :" +"Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte" +" en cliquant sur le bouton ci-dessous :" #: vibes_auth/templates/user_verification_email.html:95 msgid "" @@ -317,8 +380,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL " -"suivante\n" +"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL suivante\n" " suivante dans votre navigateur web :" #: vibes_auth/templates/user_verification_email.html:101 @@ -352,3 +414,19 @@ msgid "" 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:168 +msgid "the token is valid" +msgstr "Le jeton est valide" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Le jeton n'est pas valide" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Le mot de passe a été réinitialisé avec succès !" + +#: vibes_auth/viewsets.py:112 +msgid "account already activated!" +msgstr "Vous avez déjà activé le compte..." diff --git a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index 6038ba10..be535738 100644 --- a/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,6 +50,71 @@ msgstr "" msgid "authentication" msgstr "" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "" + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "" + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -73,7 +138,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "" @@ -85,11 +151,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "" @@ -332,3 +394,19 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "" + +#: vibes_auth/viewsets.py:112 +msgid "account already activated!" +msgstr "" diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo b/vibes_auth/locale/it_IT/LC_MESSAGES/django.mo index 49af3cb8d2cdc8797d75a3feb87c255710e4d71c..0512581cf570d126345169dfd12f84314dbf0f95 100644 GIT binary patch delta 3342 zcmaKtYm61;8OPrRTo;ygS!7`s5npyIu;3osRRjcCaI0Iiy9=xrP=XG7W|t{*W)5@a zEWz8cv3&4Lt(n@UsZD4Ni6%|3IkoKvV~l8GG#1lav~6sHm&6d`hqei|*!1_GnZqTb zZ_YEncix$K?$7S&floHq-kU$`DZ|>0EJ4o9Fs26oehC-WJC_=>3cd?_;j9*87Q>ZL z?+?N2;r*~1J_S4BF}N1K2Csmh!+EfKwlVE+6}()gZe%lugHgB|?t+)W!>}3t5MtZ> z6v~lja{eB6aQ`1TAGV_8D!3Htd=qSg+n{3E1NoU^ejmbSg<55!4}mKg{4I3g znpR^rz#l_-{zq7X??V~bJ{RNgK8P=7Kh${@4#LOs^W$(9_isVz`2$>zeRGnHJf6*0 zO7Rtt)R;lI5spJe@B^rf{0Qp(pFu@_3@XL1ceTLpgE= z@-sb*fJ(3yDr2Kiy|EA84kIW>U#hWDP2Ym_oB0!z1OLd`juvHP5GvwvxDNV|pE=4! z&tHVfz}rxn{0o%czvVm$zs~)~P!267?FV7)dNzC6{1R@0?O35)W)vQVdmvdiA3!zH zzo8i1o_-l9o{u#>9FxF*g4;+FApbWkM_51|f2tR_-*Nb%pcq>$3BXEi4-(m9& z_z2`@p67y3<^<$ha|)^_X4836upX+(Hp3_2oluT^2sKuxq2BMcnM31{9#8*VgLLi4 zSrfFxel;u(laH4~vq>AHif`b0f} zld1jmABdhRT4g|!ptS-~s&*o~koAbh=Wb*>GJxEKXnhm87ukkrv>2dtDU&LL)>`B) zL?fH6%zpaEK?kGAb%@fdrcqk8wjj5ryKD^a%=emkHRUoy(=d!QmZs#k{6_U}Z#+1U zyNlfPA*+$ih#F993{kB$)0ETPgA5{@5G^&_R>UG|HjSKmNb74E(sAuzKa%t}U)y_^ z8+nt5tYhPFzZ=+=j#fDwTs_RJ7=GV>1!CPVDkHa1W-hn4;^u>4`o_KDgBO zIziFrm1!q-B3mu{p;NSz@+A9UpX>X{ryYyxOIseFF}62$yx^?kWygz5_{Fnx5uv;h zQl_*T?{kCLn{Z+;3<}B7Id@;4`D!cGH1x@;?;lG3ImfGIIcX#*wbe+}`G*%ZRxoJ- zE|QqNhit_Sie50q!|bKANpnk%=jUIR6Q^}acjU&A=T0kyd4`KFDex=FvDVJy$=2t3 zvl4n0>jl$}?-dOJ=5^&TJxbQh{eEY;m{sBeHOb3!U%hPlf^Mik*7mEWOT4&$>mA8Z z`){_Ty+Xch(X-W{(J{`{lov*UQzDt64f7m_eFd{+TJ@dsjvuj39D9^CwEha(Dy#-^ zp-@Opw|}QCS5}Sr+)c*jt)s83pM2JC>wD)NXlfgxuiU8QM6UIn0)(D|w}InC%(MMmvYgk{dc7u5HQd^(Brs z9uw^sqB_^#4VS6%j)pZ9`scZmHA$9wb)?4tQl6Gzh1;(}B#(40OWx@0PTuV7>e=B= zREb^n@+^HFJ5xTJw9hgXiCwrjIn(*OzO8=Vc>$pjbK2LTIeUEeD5)>3_cX%!3dQcC P|1P*#YuE4V>Tdc!pXYfS delta 1742 zcmYk+duS9_6vy$iNowN8WX*GR&0`Z?HSv|C>m#N%nrM=ZQN$Y5Dj}vti4svtEh4(K zG*JH%xk&%1;sg9kL|m016sp(?Dj1c3!H_EAKfVj4J`nBqHyxpuJ@c8F-M#nRbMMTv z#jopX`F;ta6I0}5dMV)7|1jW zViC^3DCS}Z@{^=(;DnF$aL_}7t2r+ z`2`#BJu0z9b$AAQ z@dkc|^XNp0edF7Y)m;CKn#g5Ls-vr%D6@Mw1D~V*7$Fyf8q*!g6vbPXLcHQNs<%&u?1)0TGU$hVZIUMcMvd=WY$e+KYb{rTsPwPr<1#{3)KjpK&;(+{0z%1a_p7NAT3(IsZ5W+L ziN%C=v>p#_uzEu4sgkOxQt95=f92LvXg#MAONeqp8}$E8k8~A5=y3N6qprQM&7Ccb zrJ_Y00XJAYF}=BWlRFv=r{dwkG`Bs{<32?8xQ3F5TU1i)c9q<6J4?^Hma@00&hiO? Fe*wq%u9W}) diff --git a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po index eee9f1c2..780283fc 100644 --- a/vibes_auth/locale/it_IT/LC_MESSAGES/django.po +++ b/vibes_auth/locale/it_IT/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: it-IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,74 @@ msgstr "Ulteriori informazioni" msgid "authentication" msgstr "Autenticazione" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Ottenere una coppia di token" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "" +"Ottenere una coppia di token (aggiornamento e accesso) per l'autenticazione." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Aggiornare una coppia di token" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Aggiorna una coppia di token (refresh e access)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Verifica di un token" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Verifica di un token (aggiornamento o accesso)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Creare un nuovo utente" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Recuperare i dettagli di un utente" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Aggiornare i dettagli di un utente" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Eliminare un utente" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Reimpostare la password di un utente inviando un'e-mail di reimpostazione " +"della password" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Gestire il caricamento dell'avatar per un utente" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Confermare la reimpostazione della password di un utente" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Le password non corrispondono" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Attivare l'account di un utente" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Il link di attivazione non è valido o l'account è già stato attivato." + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "L'uuid b64-encoded dell'utente che ci ha segnalato il nuovo utente." @@ -74,7 +137,8 @@ msgstr "Numero di telefono malformato: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato attributo non valido: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Il link di attivazione non è valido!" @@ -86,11 +150,7 @@ msgstr "L'account è già stato attivato..." msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Le password non corrispondono" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Il gettone non è valido!" @@ -347,3 +407,19 @@ msgid "" 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:168 +msgid "the token is valid" +msgstr "Il token è valido" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Il token non è valido" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "La password è stata reimpostata con successo!" + +#: vibes_auth/viewsets.py:112 +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 d1d56130c63ae168e252c3db2c8e06fcd9cb5ae6..86addbaf0cc074656147890e2d98c95901e3cdf9 100644 GIT binary patch delta 3505 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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 f5e8a2fa..232479c5 100644 --- a/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: ja-JP\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,71 @@ msgstr "追加情報" msgid "authentication" msgstr "認証" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "トークン・ペアの取得" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "認証用のトークンペア(リフレッシュとアクセス)を取得する。" + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "トークン・ペアのリフレッシュ" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "トークン・ペアをリフレッシュする(リフレッシュとアクセス)。" + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "トークンの検証" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "トークンを確認する(リフレッシュまたはアクセス)。" + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "新規ユーザーの作成" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "ユーザーの詳細を取得する" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "ユーザー情報の更新" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "ユーザーを削除する" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "パスワード再設定メールを送信して、ユーザーのパスワードを再設定する。" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "ユーザーのアバターアップロードを処理する" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "ユーザーのパスワード・リセットを確認する" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "パスワードが一致しない" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "ユーザーアカウントの有効化" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "アクティベーションリンクが無効であるか、アカウントがすでにアクティベーションされています。" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "新規ユーザーを紹介したユーザーのb64エンコードされたuuid。" @@ -74,7 +134,8 @@ msgstr "不正な電話番号:{phone_number}。" msgid "Invalid attribute format: {attribute_pair}" msgstr "無効な属性形式です:{attribute_pair}。" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "アクティベーションリンクが無効です!" @@ -86,11 +147,7 @@ msgstr "アカウントはすでに有効になっています..." msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "パスワードが一致しない" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "トークンが無効です!" @@ -254,9 +311,7 @@ msgstr "こんにちは、%(user_first_name)sです、" msgid "" "we have received a request to reset your password. please reset your " "password by clicking the button below:" -msgstr "" -"パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワー" -"ドをリセットしてください:" +msgstr "パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワードをリセットしてください:" #: vibes_auth/templates/user_reset_password_email.html:84 msgid "reset password" @@ -266,9 +321,7 @@ msgstr "パスワードのリセット" msgid "" "if the button above does not work, please copy and paste the following URL " "into your web browser:" -msgstr "" -"上記のボタンが機能しない場合は、以下のURLをコピーしてウェブブラウザに貼り付け" -"てください:" +msgstr "上記のボタンが機能しない場合は、以下のURLをコピーしてウェブブラウザに貼り付けてください:" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." @@ -294,9 +347,7 @@ msgstr "アカウントの有効化" msgid "" "thank you for signing up for %(project_name)s. please activate your account " "by clicking the button below:" -msgstr "" -"%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックし" -"てアカウントを有効にしてください:" +msgstr "%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックしてアカウントを有効にしてください:" #: vibes_auth/templates/user_verification_email.html:95 msgid "" @@ -311,8 +362,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けて" -"ください。\n" +"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けてください。\n" " をウェブブラウザに貼り付けてください:" #: vibes_auth/templates/user_verification_email.html:101 @@ -343,6 +393,20 @@ msgstr "{config.PROJECT_NAME}。| パスワードのリセット" msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "" -"電話番号の形式が無効です。電話番号は次の形式で入力してください:" -"\"+999999999\".15桁まで入力可能です。" +msgstr "電話番号の形式が無効です。電話番号は次の形式で入力してください:\"+999999999\".15桁まで入力可能です。" + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "トークンは有効です" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "トークンが無効" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "パスワードのリセットに成功しました!" + +#: vibes_auth/viewsets.py:112 +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 6038ba10..be535738 100644 --- a/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,6 +50,71 @@ msgstr "" msgid "authentication" msgstr "" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "" + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "" + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -73,7 +138,8 @@ msgstr "" msgid "Invalid attribute format: {attribute_pair}" msgstr "" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "" @@ -85,11 +151,7 @@ msgstr "" msgid "something went wrong: {e!s}" msgstr "" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "" @@ -332,3 +394,19 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "" + +#: vibes_auth/viewsets.py:112 +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 3f79539465fe3be130418cde15e322df5c91aa5d..85fe325513aab1ed8e333138e2e4ff98fcc3886a 100644 GIT binary patch delta 3336 zcmaKtdu$Zd9>-6yR-_1RWr3>T6c7tY^;W7-R1mBvBEnT((x}tjv)iHD*=BaOwR&&% z4rPG(QDNB`OZuW2=Qcp^Ev0t zncw@g&vx!wS^cu5{z1d&Mb1Hfn_x^8ets$s#>b}_vk-m)=fe7l#+(J)q0X;{OWPs%Uhbk@H@Io3=%nVMM;Q)UsI375huVm9)a25*B4 zVFfOOPeFd>Qyy~Y2vm)Khn;W+VaV`W=)pXco`X=1eG3)9FHjD5(E#EaC_CGl$o~u` zcd?<=JPu{(X($Ez;Uf4h)Q3N%`wc7XL`LGe? zvtVZn`QKVcldvH}&tZKr{0Pp2rx1?1yd5rqJy5-J2b80a!lm#_fGJPN9ld5@*i4=SU6+sK`sY_d-Qam40Hq#B2;&sr0 z9#kprfr{{XsBTW2*HAoER2&Bhjogg0nOj#9gOc(lS6>3f^0-|Q!Ym|bgi}{8xYlB8PZS&E{kW$KcvmfuSwTq_TxVe z+FOrYjBt(P?p1v?u0*bmXGw`RrE~R(nyC$GMAjfuP};a^8@jvdujS7Ifi zM$@-B^G*%WFvqc;4=!58+)0{Tf&lNc`?1paO zRECNrH|ON#N%BFzjSe=q)@D!KJ>iDF(DnRrw})IWFr^dsj>d!Pv49elm9XFXp_g?- zujF?`dnau*qYb zz{}*&c*^Xc>lM>4ha$J}oYugGfoF%6z%;)(OA3nRXkTL{y1((cxk&-Nvg7%~Zqdsb z0!*vQX1o=3O};lXluPPxoSNv3$!|>=KCTyPJI{Ej?o_|Hc>TI)_0-zR9@-ql#vE}A7>V{dTYE%HTj!Unn8_NGmB)m0>;9C`)Jgh~2B6c4+8yfNZt`@@lv z+D}{dSer&3_@1qd*rSd(gD(9azZ!SW!J!dvM^0{;p2cxZHlx#b-NESf=BbOWJhoG1 zotMYka@>4Bt!In1_nP0GuxUJpLoOYT`hmdPQ9%3VbQ*shXE{DGejQPsUdO};pL+SY zd2L6uXIkHMhcqRPJ6uw>;)ZIAj!Y|8PcWLqo&sOA(LuSQ(V1=0?U~upXlB-&t5k#n#q`yre<>A8``u_y=ACw# yAMfyzU$DiTS1>o7*y3BKzjof=>+JJ(jF9eH^NhN>%y@EC4N@9+b**`3rtVJyYMx2AZVeN9x8}}2wJGVzv~S;_`jcX@0~fz|NO^&vrg8g-$b%H zjFuwGhz&urRy>!*g*LvQSv5{Ty>G!fY{wEjkAv_w7UEkB;}!nV*xfJ zA4%I9I{evsE}CeIZwD4}e;p(E1pDGU)PNuT`)|lV_6y_KC&z3jCQutWhSTsjYGL)c zW^K3-^O@hS(8=S$UF6T6crVOeVFULc{O8ros-)DR21?>^OraLK4Ts_$)Iv|97Iw~m zpFwTp4k}|Wu$1}jD;+H$k4rwrus>Ge0IWr&Y?1G3RBAV4E$&1O*o~XJ+>2z_KI2IIj>=3W zs~(IgTpuvoh#LO^=~FFz3zL5pQ!$mJg*2g8WT;|l=R$Jq01m_s|Na8b<^C!%m;FJd zI-gZ*VNq0O;=YSf#kw0c&Jon-yNk%bR(_cW`r>t@j_fX~m>%N}e2=Sf9qCX_^dNKE zPt+0iXZ2dhK~!yYB4uM|P)BzWbtJb?8?tEc5#*)mXrMwIffeYb43(;lsFgb8RIC#j z!%iVuZ{7p9G=pxl>KW;8*|xg z|G{`)En)%DIrS2ikM2M@Wv5p+Q>w8R6HsiwQ^z>q4Ux| z5}i|$P=P9SYN~}kUaz+flycS2aH5e=4a_9|Z>l3w?H#LrHF^Ha`Iv0rQsF<)`BOh$ z`t>MR7n*(vbG%;fg`&4C_dL7C&BW+s7W+JgOK^KX)y2J5J?);#7S5S7#{V3~kuLu9md`UzDe*qU6skZ, 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: nl-NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,73 @@ msgstr "Extra info" msgid "authentication" msgstr "Authenticatie" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Een tokenpaar verkrijgen" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Verkrijg een tokenpaar (refresh en access) voor verificatie." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Een tokenpaar vernieuwen" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Een tokenpaar verversen (refresh en access)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Een token verifiëren" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Een token verifiëren (verversen of toegang)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Een nieuwe gebruiker maken" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "De gegevens van een gebruiker ophalen" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "De gegevens van een gebruiker bijwerken" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Een gebruiker verwijderen" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Het wachtwoord van een gebruiker opnieuw instellen door een e-mail met het " +"wachtwoord opnieuw in te stellen" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Avatar uploaden voor een gebruiker afhandelen" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Bevestig het resetten van het wachtwoord van een gebruiker" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Wachtwoorden komen niet overeen" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Een gebruikersaccount activeren" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Activeringslink is ongeldig of account is al geactiveerd" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -76,7 +138,8 @@ msgstr "Misvormd telefoonnummer: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Ongeldig attribuutformaat: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Activeringslink is ongeldig!" @@ -88,11 +151,7 @@ msgstr "Account is al geactiveerd..." msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Wachtwoorden komen niet overeen" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token is invalid!" @@ -257,8 +316,8 @@ msgid "" "we have received a request to reset your password. please reset your " "password by clicking the button below:" msgstr "" -"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik " -"op de knop hieronder om je wachtwoord opnieuw in te stellen:" +"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik" +" op de knop hieronder om je wachtwoord opnieuw in te stellen:" #: vibes_auth/templates/user_reset_password_email.html:84 msgid "reset password" @@ -297,8 +356,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account " "by clicking the button below:" msgstr "" -"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op " -"de onderstaande knop te klikken:" +"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op" +" de onderstaande knop te klikken:" #: vibes_auth/templates/user_verification_email.html:95 msgid "" @@ -347,3 +406,19 @@ msgid "" msgstr "" "Ongeldig formaat telefoonnummer. Het nummer moet worden ingevoerd in de " "indeling: \"+999999999\". Maximaal 15 cijfers toegestaan." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "The token is valid" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Het token is ongeldig" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Wachtwoord is succesvol gereset!" + +#: vibes_auth/viewsets.py:112 +msgid "account already activated!" +msgstr "Je hebt de account al geactiveerd..." diff --git a/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo b/vibes_auth/locale/pl_PL/LC_MESSAGES/django.mo index a05b793d7c83f4195e1cd7ef1a6ebbb19c9ad2c5..7d2c9b1375daf60b1a9b4de85323785609a6eaed 100644 GIT binary patch delta 3268 zcmZ{lTWlQF8OM)9a4wEX;^4$iNOBTWV&Y^|T-=ZZ;($xSt+|nq3l?O&JDZGmJ+s~2 z@oKH26@*BwDpjopiXc>?LU}+S1!}6k_@O0Use;n0T0x3XMT<}$DitM_nyN_s{b$FH z4dH0N`JHp-obPtNGyCh_H+R)OY@7S6p$#H8A^)3WObvc;JrCM@^NiUD--lgr?tEib z!fvSb1Mqfu0(Qb@VLLnzx57GH1wVsJVCMp37Q>BjnM`e`vyh3sum>K4H^4Kn89oEC zZO%eD@^Zr8z@?0@z&6-|lC^LR)cj7^3im_B@)+c2GRZiA%?dT7qmAE&itI)B1pGO4 zU|)+dJK%Frp8pY!z`sEmIIsxg@NtMQCI>Yi!hU!G>U$V;@5W@E<6L`zQc$ z50sr_OUVBUI!`m9)Vv5~=qFGLeg=Esub?(wPUf2#D1uJ-71#@vp`%a^KL&Gf1X6eA zeb@~@g15jHl&^-pZRG!G6Gg(rSDAPP>s#POxDGBP9B~u89qxsy`qPl0%uDb-_&Ss$ zS0FabTCM zC;%1FDySpshCAU7s0hcPj`B2I55EIt_*J+DUQEVUASP?38+RVy#V#nr-%I!$REl1P zO7)x2!b!LRehd|PEBV#FE~whs0#yS8ke@loLyr287|fIK>+l75T=)O?$%0KBtQPh| zd3q4u4Zj6hV#eVx{4K*6j5IznS@dQ*6z5`X|pF-*Du*Nh&{GM(HlU_}H zI2rW8dl02Z3hqGkK~md}r~q}wGn+CYr_>%ob|4Byw~4=!`0THP3P|k`qR;tegqs%I zkFOTvxS|O*z6l!ZoOPy0kz>d<PXWVQ2Aw5E0 zSGLg__T!I(CiWsAygQt)`oxBK~|E z%rJ8+qVwH_a3$ilkEibQ^$5op7g#^siKq=A_aheJO2=1D-wm~!8;HO8D$s96o13?E zJ>nLFpA^Q6~ zyTpPRF9sO)(Dw7&(%E1KYob5{dF=TsyOU19l@ z>zBQ>Q}zNs6`fmnWLd*STMFZdvtd48jV>+pYK>G(|r zf7Ho)8AE`{aWWZCMSY9D-(JWx4q%p==ogD7Zy23b1mmY${W)8XxW#JL%Q@-cBvi+C z2bucWis#lRT;FqTJ{+={pj4iGzCe-uYjIcf>Edjw4eJxtaxSR&Y>xIU>AN{zm<#-J zV8>YQ)Sn9MFsrPSD_1K)#qr(L_>m=NnuhiVWz-ilW3m3RI5&FlIrfxOsy{^vW+*p@ zD6hs+Kd87TgV}EnmqKlIXU#@`S-LW{ZwOuCNyir0UaF#37MzO8&as*NY%}ARmo{BD zba<><%EjsmPO;iZ?}hP-`I7n1=gOPTl&#pbn-6WMNXM#WH;<3lPeqq+Jh6U8iVDF< zwSHD_?bS@U>!Q8wVQt^kL2%28lh0puXZl5)!C9_;xl1W?{A#M*Yo*#20_AGVR;oIN z9ywLuy%vHi|hMo;;IwhZ|~wRP&^DA1K+P+w((P+n? F{|~60fmr|m delta 1714 zcmYk+S!_&E9LMqhjM9ba-VW7H7fLtPRxPy^rBwtkLJ(W1v{HM52PP4XG+xLdM0jWf zFG3j)eUYd&#FHQrjYt}yB$h-a5)t3u?Tt8@b3W(Xd*>|wbMC!8?^#XsZF<}pBQ=wA z$yn^6HIaHO#xE=W42iCN!xH?3icAr+&ckM0 z6ENG3RkZICzC!$-Li}}@GB`O3>0cvKUiu^2%hZX7~B$!r; z)mZD>f?B{iR0M9Kp6^Q|{#r>t7vzBNSJYt|#7;~l3<~XeoP%+MjVRj!+>6Um6YWL* zVy}=O+DB9b2XQVY@Q@bJgxZ3YQ7T1LR$(O`#0XyX+mBEK4f+On=d|JwDq;~Vz)Iw2 zD=75*He^iOgGAjrP!T+hnozfI^uAwth4Z;FfO@bzn^zH=a4p_KMI;m+3S|iv(4LPP zaEpI^Cyt?g92a31s=p8Dy`JntKJ5sW>;0cgMWJfL^>_d^;}@v2(2qJyiS(+DsxW}s z=ZR$I>%HG#lgZ=B)oPGx$%^JQat&Eq%=gVp6<*2y>xA;{_?NVQjA;w}D^8D%xTtEo6!+djEM_yi`CrkF3?}L!$kyBkREE z)2pOYJIt#M?Jv9Hod-oo+o#a#p#7f+vz3zB0b5Acb}2QI>*^^A)gtMm!8!A`L+wNr zB<)*+R~ssHfa2WC_{pvzVV&zqm>3Hu#s}Pnr2N>$q)S0}DzwT4lQ+4(\n" "Language-Team: BRITISH ENGLISH \n" @@ -46,6 +46,74 @@ msgstr "Dodatkowe informacje" msgid "authentication" msgstr "Uwierzytelnianie" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Uzyskanie pary tokenów" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "" +"Uzyskanie pary tokenów (odświeżenie i dostęp) w celu uwierzytelnienia." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Odśwież parę tokenów" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Odświeżenie pary tokenów (odświeżenie i dostęp)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Weryfikacja tokena" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Weryfikacja tokena (odświeżenie lub dostęp)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Tworzenie nowego użytkownika" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Pobieranie danych użytkownika" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Aktualizacja danych użytkownika" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Usuwanie użytkownika" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Zresetowanie hasła użytkownika poprzez wysłanie wiadomości e-mail " +"resetującej hasło." + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Obsługa przesyłania awatara dla użytkownika" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Potwierdzenie zresetowania hasła użytkownika" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Hasła nie są zgodne" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Aktywacja konta użytkownika" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Link aktywacyjny jest nieprawidłowy lub konto zostało już aktywowane." + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -71,7 +139,8 @@ msgstr "Zniekształcony numer telefonu: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Nieprawidłowy format atrybutu: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Link aktywacyjny jest nieprawidłowy!" @@ -83,11 +152,7 @@ msgstr "Konto zostało już aktywowane..." msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Hasła nie są zgodne" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" @@ -340,5 +405,21 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie: " -"\"+999999999\". Dozwolone do 15 cyfr." +"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie:" +" \"+999999999\". Dozwolone do 15 cyfr." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "Token jest ważny" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Token jest nieprawidłowy" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Hasło zostało pomyślnie zresetowane!" + +#: vibes_auth/viewsets.py:112 +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 e9f8159cdfcbcc723cc731c44600f877043fa432..ec882183c3c52d6461ce3122b7fd6898af660962 100644 GIT binary patch delta 3264 zcmZ{lYitx%6vuC|6r?B*TS|F3rGP-`qQ%NXZIy}$3J4+(X_R4iYDcy^o7tTrf>{mv zO^s$$K8Q+1VlXB|H%8+lQCFieYK(pnMG{35{o)5TQH&)1{xegsJZ^gCcjwN`x##@P zx!XN$uXUD=jjw*nFuJiR*uTS!DZ!(|xiG#NVa!~31UAF!k;Y7dv!UMaf>*+=un|55 z>)~Oz5Pk$F!;^3o%tL|ZLkGKz)Oumx_07sH2P4SW)^w|NFCkOK+7faAD7 z0ms8yoLma0L9KVdi{PzLx!ei)GnwSxgEdMuV4@FqLuIxP-Vfh^Hf*mo=4!YXD)O&k zA3P4V!P?Pm4)21*VzxuA2e1?FN!BZ{n)}b8{CovxvA_9|i6Xv`uO#tgh%}}XUITA~ z%HVM*MV^Lw|5>Qa4?{`(LBeBj0{8zw1vU;jnVPAPtxOA?2p7Q;X4Z14gInQT7{JAF zKjhDR%S8eG3RUBiunjhlhBjUaUDyNV=S!%-euhfmZ>WIVX#jCK)IOWXqJIOEhggs_ z`=B-&fO7CUY=NIZefVdxUc-$tXoNFi8 z|4mgi2@CUCIK=L)@Ca09BS=R*(F`w#9Z(;7kXX#4ume5^r^D}|63`J)fOSx(q!p?+ zR>JGydZ<93E-_I}4?@-I6{tYoO!y1Lrf>Px5 zWc_U@B|m^F;cw7~rIF~rfypkYT73mk$&4ZV2VoPWeC7a@<1$pB??YwqIn;MYp)zd5 zyCiRh@-q*nU}`P$g=jLG*kfR4H$P^0ymGnE@z&FT+c9{@-V^2>zf2I0>EbWtKo? zx)CmfyPza4Lv8#n?1f)KDYTf6wb4o_r97yN_dcq7m;O{W$1;HMRg# z{UoVm*3g-~F`C8AbbB(N3Fl!=n3`}oHaMd5p4_Mr)njLl?hGq)uomn(jMEp5HC%NX zbcQLPxdZFOIxvkcYz1avYNl#TU9F)W(9m(!30f7l*356-;P`IOPRq86-gYNv&Gwxh z-zoH3o^RRdv{NX|NrhW#CRH_Y?H*}cLBa7aD})DY7FX+?u)C(QT&bB})tUBkJ+9w} zr}z~sZx;$XJU?UM&ncR;@7P6$$2n(5^oq$iStnZ22jNd6tZ8;GljW6uyJ-7Xkk5K{ z#_CZd(Ff&WBM%N+v#n^mxl{4xZPz#6*=wg0!RKHmv9F-m>*R`V+Ag|YE)^aewegZT zM5_=)8TSO)?9T9yQEn-gVo;lCuR(qOzj)5gQYOm#9C~cqX%(DY#?9T$!}z6BS~-2T zn@zsVhj#6hM&Bv=uG25&5@9nA5@ZYE;oAD}iP}TWapl~C<>vbBteY_;n3R*nXen$T z{aAfI6Bl5JoAABSA70!)qzTGQ0(wzUBi+yyqGTEjl;}&{oX0(X4$>zY~V)m zpW5)9am_8O?3|kqvV6kJal2)_!TuW>VENd%?}u%n`<%#4o^N;|lD=Thy==`MsuCrP zMdE1qwq*y!xDO)@Q{h{6-P6?=y*7R7(ij=1$IZDJ3D&3Hl)z14UH#*w>l5|Q5z6@= zoesyhl2B})f~`w7(lLv-ADX%4${XsLz*T4Q|G4yoi0V4Kwf!hVU!)!a#~y5VNrYi!dE$Azz7G z0|Wl7k&6~u<9i4*nYUsVwqsX(hkD>gfBpk`kp0G7?2>BMj0LET9K|vC2Nl@p?q=(8 z2BxvTU1QLL8~2buYxh1d>%cnZAN>2}tg58cpdM6v zo3}F5LQ&sF3^PA~D%x|X@88HI{{(Ao+|Z8N{STgFALg%dBmTq%xQ=uvwRezPUXBF9GFnO>MOQuPh}Cpd!!*$QuYyr4qEDc!V3Z=A zPc2>PRqE7K3thZX=ed%7FI#1(H$tf&PyfGFFd0NA(Kdyy`cRunudU-!tQk!esLcQ9O$_!F)VxDz=giO)G5 hNv, 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: pt-BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,72 @@ msgstr "Informações adicionais" msgid "authentication" msgstr "Autenticação" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Obter um par de tokens" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Obter um par de tokens (atualização e acesso) para autenticação." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Atualizar um par de tokens" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Atualizar um par de tokens (atualizar e acessar)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Verificar um token" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Verificar um token (atualização ou acesso)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Criar um novo usuário" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Recuperar os detalhes de um usuário" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Atualizar os detalhes de um usuário" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Excluir um usuário" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Redefinir a senha de um usuário enviando um e-mail de redefinição de senha" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Manipular o upload do avatar de um usuário" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Confirmar a redefinição de senha de um usuário" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "As senhas não correspondem" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Ativar a conta de um usuário" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "O link de ativação é inválido ou a conta já está ativada" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "O uuid codificado em b64 do usuário que nos indicou o novo usuário." @@ -74,7 +135,8 @@ msgstr "Número de telefone malformado: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Formato de atributo inválido: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "O link de ativação é inválido!" @@ -86,11 +148,7 @@ msgstr "A conta já foi ativada..." msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "As senhas não correspondem" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "O token é inválido!" @@ -267,8 +325,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL " "into your web browser:" msgstr "" -"Se o botão acima não funcionar, copie e cole o seguinte URL em seu navegador " -"da Web:" +"Se o botão acima não funcionar, copie e cole o seguinte URL em seu navegador" +" da Web:" #: vibes_auth/templates/user_reset_password_email.html:88 msgid "if you did not send this request, please ignore this email." @@ -345,3 +403,19 @@ msgid "" 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:168 +msgid "the token is valid" +msgstr "O token é válido" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "O token é inválido" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "A senha foi redefinida com sucesso!" + +#: vibes_auth/viewsets.py:112 +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 fff5a23ff0a712339f1a8c37252ed9c457784e37..33e190abf9cbaff0be4b04876b55b48bc128d33f 100644 GIT binary patch delta 3408 zcmai#ZHygN8OP7I%cXP+eWAN$DP3n-?aS6)wC%ENp{;cb)go-W1^TvPXYZX$hu)pJ z&Yfv3k>2QP_(Di^L`uN;mTCw|3)wW~<%_k8=@$$E(b6C>s2_a!V#Gv=7=QmWbGI$5 z@noO-J9B2{dCv1Z|1*1j&6}GV?<{D2+%QJ48?b-RFs1?DzJedd`74d-g>S(g*gDIY z>)~>!=Lg|hxDR&1$6-4>3H#wIa54M<&V!v-88a95!fO?39h2EC+znU4-S8UtO;~{6 zfy6dXL2cy6Ie!V~bNw&40Jh=eW3UTqeFMB2ZiC9@e#oCG=hq=DDAk0CUi>OlW>3S1 z;c4i?zBXfSg-<~3{0%q;e-9O4`y7J9FG2QV4nVCZa3dVg*U!RMu3v@n^EzBgeDf|7 z?f5F*Qi&HsN@F&{+u#nU430uoYJ{sh(I58!IJh%^*Bo`ZVvy?njEg)-=bpMa~ODzpn~!}r4j za15e5^A=nV--SzI8_t)&)eETqt`2nP#Jw0D)W<2fzLp?Wqtuw+223~o=G`2z#hnT!;CW7%EH&7O7tpJ zCclQ#!f&A*{S9`(8T92w*bP;Y%}^WqBBWSmKh#E!KwdFNp%Qo&s`oF#b?|p^Sm%E+ zpD_gpayFnIJPL1vr=c9Z2amwH2tuNL3`(RwflA;-NRpKQBWx zZa>$+j^UgQaYug92S1D5jHv>*VEQ0wsARpET6F190DV+6q@P={+p$k!{3|gc7TX`&DcYEm(8tI7=5A z60A8ip_J@5Nov*5EjtzM#J(^wW7hE*L!+_l2UGj4xqf8AkFH%z1fR`J zGG9r&-wR^Ds&6w~9gcV3%q(Wxgk<4RJk9!~#0+izs0Xx7HYYS!n{#c6{Tjm>+S zdW;@+>RwRxg9o^oJv3D-Z_M?p`J1)WZM&f}^5V$%4ytl_VapyRsMgbyZSCo|+Memj zI_K9NKRD=C{jwp!yqzrCrL=F(W9_wa)_}|0q(7T8dCkGgL@+Ua_46%PMB%F8p>%NW z#5OAt>O}*cBuIScK`#!iRL-6lt3_eGHaSkiJg4p^S*ceP&8Blt`CP<4&2-A%gRX-> z;-p$E7Sn&s-MQG+{cI_7n#6w9f5?r)D7|Ce%}cDa{JvL5Ce}ypaAIU$rDfk>ra0@# zmeKC8=0;)F^FQp=46=R2OakX(C?^OLbM9E|MGtr%xtX4s-#f5{;ONAoZ`w|!FRKj|kY0Zr%$DLA=i@iI2wEZiM zOZ%uYOuN-hr8q%e57{bC_k^>Y_GFJBhN%rBhGBgH?0dF5xs0aTuqJY95r-O~kNNbX zsWWetPJ_zTY%iJQ{Y_gsdX^4*rG%o|=IB&ZeZR`*!isdtdz9|$SeW*AO!jV-Zj-7L tB#xC7N5dWExHZ?Ci+(wMzvJ|>sf4wm|LuO_xkW2mI;KA)>4oe5^IuU+rsDtr delta 1739 zcmYk+e@K;A9LMqRRZG35H}mQ(GrhX9yp=!Fe%LCPm3mA1W3{oZ6pbJ(vM3^o^3u;S zSWq3r{zygyK@^c(*cxn6;TDa>AdorQ8T14HRV%CY*)3{KoC!58v2KD_`tiwZ?k2i284&qe&6GQkf=3yY+ zEQt9yAETIqt;kOjwuJ^C+r~u`?ey)%T>5u#8a~2F_%~|6XMTSi8OUB^A*N=S9mQhQ zLN4Nm_y!f&@=UYcxE`~a-)_;!;>OR&#~yiKn2lls{ipu@7_%xVb*O>ru^i*5K=dQcOeMeXfX)I@{0 z5+5RSSr$K5s%Id(Wl^lfm~T54&_9nF?<(r|_j1X9n8pKcC?#XaIkLa71fStIm_-^+ z;5BT;D$=Gia0I`^uTg=78BAMMhU}`0ZlScLVXQgZ_}@e^Ey zuTU$lCq0U|5t+;4sOQ?S7`ss`JA<0|3i7c5E}HN@DuaKZ0)2scK9NFR)W|~}n%Sry zc47}6!S(nb&cLR~L@GP5p8i49gagROe&AAyk8vrEqs~kv(dqfks58=ye4nsB8cNY` zcnn8S5x4PcJ-7$;Krd>5+gvzH-lTJpg?RsOuqx_oYK=OSI;yg>gsO9&IzJ%3j;IWbtHf1}!WF*Z|M{Qg3WQ_K9mR=bX>eOAEBsWGY+v5czVE2%2_yVk0~ z{N8@39i@Im)dA9r#CyqL234pwnFn79{H;m8tGw;pZ+sbD!H=6m{Pf{qDY>^=-1R LI2LfjCI7z#Lqe`M diff --git a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index 277eede1..e439f269 100644 --- a/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: ro-RO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,74 @@ msgstr "Informații suplimentare" msgid "authentication" msgstr "Autentificare" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Obțineți o pereche de jetoane" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "" +"Obțineți o pereche de jetoane (refresh și access) pentru autentificare." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Reîmprospătați o pereche de jetoane" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Actualizați o pereche de jetoane (actualizare și acces)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Verificarea unui jeton" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Verificarea unui jeton (reîmprospătare sau acces)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Creați un utilizator nou" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Recuperarea detaliilor unui utilizator" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Actualizarea detaliilor unui utilizator" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Ștergeți un utilizator" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Resetați parola unui utilizator prin trimiterea unui e-mail de resetare a " +"parolei" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Gestionarea încărcării avatarului pentru un utilizator" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Confirmați resetarea parolei unui utilizator" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Parolele nu se potrivesc" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Activați contul unui utilizator" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Linkul de activare este invalid sau contul este deja activat" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -75,7 +138,8 @@ msgstr "Număr de telefon malformat: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Format de atribut invalid: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Linkul de activare este invalid!" @@ -87,11 +151,7 @@ msgstr "Contul a fost deja activat..." msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Parolele nu se potrivesc" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" @@ -312,8 +372,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți " -"următoarea adresă URL\n" +"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți următoarea adresă URL\n" " în browserul dvs. web:" #: vibes_auth/templates/user_verification_email.html:101 @@ -347,3 +406,19 @@ msgid "" 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:168 +msgid "the token is valid" +msgstr "Jetonul este valid" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Jetonul nu este valabil" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Parola a fost resetată cu succes!" + +#: vibes_auth/viewsets.py:112 +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 87985eb611f04e51f79c53d91edf27a493479ea6..4e0080cfa7b2a129429d8eba0fb6176ce58419f1 100644 GIT binary patch delta 3486 zcmaKuX>3$g6vywBG89^+v;rNw_-YXf*g>l(i&C&wz>Q61u_|NdRVGYl>MSKBYAtmm z#RZ?JaX}INP`@x`XsFb-#(mFwE{R**P4t7txJ8YqzjNQCg$Ta%yx+a|-FMG9|8w4? zw=X=nqW#mN+#QOm5i7&~%2BEvelnUH*9T*ingKtARWLVCsS{x}l>PPaOt>Bf;0`zu z?ty2+mtZM82n%6gtWx9Q3|K6#<}nz@!liH~Tnmqfw?aR>58_)r3?-1=9^Zx&nEwHb zU_OVO1S_DdFM!9vD=XXh(5A3gvj@^@hi z{0fSL6$Lnl*Fa)X8==%XVU<}#ZdgLEkysx3~pgT zq<*_&uBkYtjF7xDK8S zw?Sf8d*Ds*IVfLGT|4PZO&UE$;7aCga20$F%7NvidoFB%m%vVV7IdII&!aAt@H8kr zvJ%RDsCyBWMe>)!_B6qF>?Z}0#tAWW(8D-e;?S5PGW4N69% z(eY9^3Cgq~ z;Uu$VP!8A$Ux%+kk=&|sKi7V^jrnI#nk-6G;&=yK58s6IU=4CmEwuqk0v)gc|7srt zar7sY442ZP3*b%g95?{4lIKtkSc7+xR@cLBxE)Hy^YMN$Tn(jZpM(<7d)$1GiVa^Y zy^;9WjV7Fporg*E_)>E)lG2xCAoAt8)8RYqqst`=;(R{VfSrcrU_opYMtkY&GVWur z8jK*df1R~F75Qlc{W~pl64Sp2Yv5XJE+(JhYHS52GM zIvbPPFOiA9T>n}onM)bYz@(w18H+Hv7GW3Ykz0bxy)hM&F4hg24;Opug0a|z-kg@v zzxm#D7>!|u(p)pKg_ty=T+1*&HX4&!ufysv=?l5)v89-SO~P_9`N5Hke$$uy=JSK6 zF0pF-v#PEz6Orc4M#xCTH<~e{I$<^^%;W|mo-jg9O=dDVJ!oC&Khamoy)iFjq?2Z1 zTGD#TKQ~wQSdIQb_67gRzPhG(tT~cs;Uss9(Hcr7H^mcSgY(RkYD$=)l*!|mxk+zP zVKZv#6?wt>dWc>0F9&>KC2kpIfFFasp4EtF-qldDPF{*jkV-M&p{dO;- zKD*c8)^GP2_C9;i>2S62z+#(H4E)Glsq2&e%gd>9Fc5O0ByJljDX@&R7!*XJiKoAIz}^O3ttrRqzjhy^ApR z<1}MG!y&y^cj?se%HFM4@JS%sWT&;NxM9vtyGIfr_(AsS%*0*RxtVD9vq1P6^3L#7 z5+?I~cE5AC9FV=g_?6uD$MDwghI}aPA=&D59Vrs(DSKoyVTeNR*3SQI9cd>b@IFV+ zH38v{x9tJ$g?-K~=uG6Ip54bcTk?3dv&|r}F1ugE?7&N}bBD-jFp-1@neu+6^<&A$ z?P#E--s@^}?4XoAvh}bkA1mEscEyn$5uhb@c~NzE&b6i@a%t0$m+Z5KF42%K*Ir#2 z=T7>o*FHc+r8@_77FjpTK^A(Pt!^*UREOu@F|54j=e59`=_92%tbGR%caX!S+qJx$ zV|_7Ua*o}b{U^}ivz*dt1bh?~dbqiLN2eMC> Q{p73o|L-gNP(_RHUl8G^ZU6uP delta 1739 zcmX}sduWYu9LMqB*~V^mGdsuJb~iScondS)JDkmSnER9rA*Inuk)q~kZjlndL~}_g z5oz`KW63?NmOoIWFj7)zAt^%MpXWUJwcqplJB7f$od&8JlSj+iG?|KGf)7j9MUj=gRlgLVkIhN^F3FhQrn7^*p8a83tRCK&cG@rQD9p= z_hA|5Cr}Hyhfz(`!$6U}#B%IM{o^pA(e-htKx(lBSD;q73pe9lB)jGdj=`U(%oGy! zNQ~fmpD`P;k@H^CHxaWl$^U!?VJc?=9>F@ig{2rz6hSPu=emN?z1z3fxI2O+#k1)|*2HK-{s0j5A=?9Cj7kA)ctYa4K z?Gw~Qzi=%E$v@9D$FLGFV?Fkv<|}4$1-KPw;YFN*A8@ta|Kd@x2|Dl+H%_4V&2TGo2f-f>Y7*eRJD5_ZW?>o^QwhMoqaZ zn&Vxm@SK7TbXBn0czT4c!c?0|*UD$o6=)4zubZ}a8l42YH3jYhCuzX*-FIH&e0qqk z!qJC>x5QM_ljvmAZ7SAyZ%j=Z>dCDSy>7GVB*#rN{BL@twWZo`)mSQBZ7#jKmV*jO zP5YwaQK6|N$8bNZVQ(yWi%f!jmN?OdlUi(dQmGS2PW0I|DS6JBl=E@+Xxefcm%i4% zN-wa1jGOj%#zA`~^RCmD)#b~Wvoz8iS=N|ezp$YRZDIBkyJyIL+fYA175?Tp y8_W$mJ-H7O?8v;cwm$8CX diff --git a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index 4820911c..0532a5e7 100644 --- a/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -1,18 +1,13 @@ -# eVibes Translations. -# Copyright (C) 2025 Egor "fureunoir" Gorbunov -# This file is distributed under the same license as the eVibes package. -# EGOR GORBUNOV , 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: ru-RU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,73 @@ msgstr "Дополнительная информация" msgid "authentication" msgstr "Аутентификация" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "Получение пары маркеров" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "Получите пару маркеров (refresh и access) для аутентификации." + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "Обновить пару маркеров" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "Обновление пары маркеров (обновление и доступ)." + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "Проверка маркера" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "Проверка маркера (обновление или доступ)." + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "Создайте нового пользователя" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "Получение информации о пользователе" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "Обновление данных пользователя" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "Удалить пользователя" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "" +"Сброс пароля пользователя путем отправки электронного сообщения о сбросе " +"пароля" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "Обработка загрузки аватара для пользователя" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "Подтверждение сброса пароля пользователя" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "Пароли не совпадают" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "Активация учетной записи пользователя" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "Ссылка на активацию недействительна или аккаунт уже активирован" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" @@ -76,7 +138,8 @@ msgstr "Некорректный номер телефона: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "Недопустимый формат атрибута: {attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "Ссылка на активацию недействительна!" @@ -88,11 +151,7 @@ msgstr "Аккаунт уже активирован..." msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "Пароли не совпадают" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "Токен недействителен!" @@ -314,8 +373,7 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий " -"URL-адрес\n" +"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий URL-адрес\n" " в свой веб-браузер:" #: vibes_auth/templates/user_verification_email.html:101 @@ -349,3 +407,19 @@ msgid "" msgstr "" "Неверный формат телефонного номера. Номер должен быть введен в формате: " "\"+999999999\". Допускается до 15 цифр." + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "Токен действителен" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "Токен недействителен" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "Пароль был успешно сброшен!" + +#: vibes_auth/viewsets.py:112 +msgid "account already activated!" +msgstr "Вы уже активировали учетную запись..." diff --git a/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo b/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.mo index 75688581ea546a256674dc35fa43b2034453c7eb..d71fb3d60d568333a728f1230f078a2468abeac3 100644 GIT binary patch delta 3115 zcmZ{ldvH|M9mh{7hDSicnurm^g;bs;R7xlhD^QBoM-jvd(THBNH_eu0H{IQY!D%PF z#KfT_dLfKL$1sAmwPag^4JC2n_?XcdwbuS4ec+7jD}Uj%osK$nrl0Su$6>KjZK0!yKZeTe1pEo?hYqYR zF=h=s1{L`qVH3OrwZN7sEDj%p#A0?rjkmzHaK9aY4UR{D2g=X;a31TMkLW1kNz77- zXF^J2*20_MR;UcRpeoW0W&bm%%+pXMe%10Kyc+#8sKBOEPP*ng$Wmr8yauj>ZHU>z zqYOR-7r_>|3id#L=1)8n&@j{59Q}QsKByN348(-a5V=&ycKGl zno{aNgU$g4RGJe|3!Q{=@Df}M--Md@4?A9rq6{kF4R9G$g|taAV)8-`d8r}pfdX>R3IVJx)I(0rEh~OvrvBiX8Eb5 z4ule#0F`+qJOgpogFq z*aS6y2V4SoK?QyqD$sLKc0=$QegD6wqf=ghGAx@FIG7KmuYAh#kTO<&9HR+$U6=l|VmBaAFWwEyc6zAC@n#Z!B&TkU$}K4dL& zGorQuxeW;;e7XMZsS8R?pPQQQd@elmJ#R_z(#m_?M6`Z)*a@fNJKb1#LBg$1xXFfa zJP~&4>fB^4(@wG*Bc-BsI!YxTRF+b^@E?zZWHePLUMc-@1bBos2#bfo+L=&C@ zlW?<>Ozw&&B4PZwDN~nlos`S#n7hk2F%h@X^+zhbXIaMF!MqOl+FGB6sg zmD}V*8|}40bM>3`b+FPGdA;NYHL4 zgZ_|LJ>_tDb0pY+FSzkunezITtzS3%BbKacR#!liT-vw*STaKxb}fPwwnM=KR6J+2?ZY z{Z&;}-sNd`PRbv79xZ#W%e%3(GNjr5Yvu$K`qr107cD>8Tj)JyP16VSJ$r{A`)U5= zUXyJED@xuVbG%f4Fe|h0MUqL6*!NH5$z|`{bdqxq5TTHiig1h%MLNm3{n~ z%Y%Ep2g|m%1;rV4L7*zusQ&+4n&CZ97lt0oc0Mt@$L5^%^Uoi7DSM`CcwcX3;J3kg zW2<9=p}B-M@wxdeOx{?W$ZcddawTTzX2o&zaIbq delta 1741 zcmYk+Sx8h-9LMo9qv@pSq>Y+OrM7C8X=-VUrCCjjv_hnaN>L_})I;@911&^R4|R|r z>LFT)7F*^aUySxBA}9!=jb1D&h=hoOsJ_4JAv(sheN8YB!b{bNc z$RXDFjcLJ)v1Fu4amEy43F>|$mf?0x!!FFmyEqu%VG#Rp2>RlUNx(E5kGYtPi;%xW zOalderj<+`ZE$vC3iX?qiqCKW_M#g6?CRf&zNWutqxw1RyrA{hAFrWibPu%xpD+(isQ-a{X8~#klTZVgg?fImyWWiI zpu^qY>fD3c!o#k9-Wj>>3U_e~e|U=g%n!09n8axG`81(AK89-OJWjwns1Ezw{U7dr zAie)x%0q8}sOOqpeLM2fM$AD9YTz8!<7L#$eq$*nW-wcviJ7F*lKU2HSUT!S1Kpw5%X0cY4%|vUlr06 zqK=qB=qsoq^ttJc*WPRJ6A2}Ku9H>J_s`ejrCjn^1Ye1FkZ8Fpi2$LaS4k@s, 2025. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-05-08 14:48+0100\n" +"POT-Creation-Date: 2025-05-13 20:44+0100\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" -"Language: BRITISH ENGLISH\n" +"Language: zh-hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -51,6 +46,71 @@ msgstr "其他信息" msgid "authentication" msgstr "认证" +#: vibes_auth/docs/drf/views.py:15 +msgid "obtain a token pair" +msgstr "获取令牌对" + +#: vibes_auth/docs/drf/views.py:16 +msgid "obtain a token pair (refresh and access) for authentication." +msgstr "获取用于身份验证的令牌对(刷新和访问)。" + +#: vibes_auth/docs/drf/views.py:35 +msgid "refresh a token pair" +msgstr "刷新令牌对" + +#: vibes_auth/docs/drf/views.py:36 +msgid "refresh a token pair (refresh and access)." +msgstr "刷新令牌对(刷新和访问)。" + +#: vibes_auth/docs/drf/views.py:55 +msgid "verify a token" +msgstr "验证令牌" + +#: vibes_auth/docs/drf/views.py:56 +msgid "Verify a token (refresh or access)." +msgstr "验证令牌(刷新或访问)。" + +#: vibes_auth/docs/drf/viewsets.py:15 +msgid "create a new user" +msgstr "创建新用户" + +#: vibes_auth/docs/drf/viewsets.py:19 +msgid "retrieve a user's details" +msgstr "读取用户详细信息" + +#: vibes_auth/docs/drf/viewsets.py:23 +msgid "update a user's details" +msgstr "更新用户信息" + +#: vibes_auth/docs/drf/viewsets.py:28 +msgid "delete a user" +msgstr "删除用户" + +#: vibes_auth/docs/drf/viewsets.py:32 +msgid "reset a user's password by sending a reset password email" +msgstr "通过发送重置密码电子邮件重置用户密码" + +#: vibes_auth/docs/drf/viewsets.py:40 +msgid "handle avatar upload for a user" +msgstr "处理用户的头像上传" + +#: vibes_auth/docs/drf/viewsets.py:49 +msgid "confirm a user's password reset" +msgstr "确认用户密码重置" + +#: vibes_auth/docs/drf/viewsets.py:53 vibes_auth/graphene/mutations.py:305 +#: vibes_auth/viewsets.py:72 +msgid "passwords do not match" +msgstr "密码不匹配" + +#: vibes_auth/docs/drf/viewsets.py:58 +msgid "activate a user's account" +msgstr "激活用户帐户" + +#: vibes_auth/docs/drf/viewsets.py:62 +msgid "activation link is invalid or account already activated" +msgstr "激活链接无效或账户已激活" + #: vibes_auth/graphene/mutations.py:40 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "将新用户推荐给我们的用户的 b64-encoded uuid。" @@ -74,7 +134,8 @@ msgstr "畸形电话号码: {phone_number}" msgid "Invalid attribute format: {attribute_pair}" msgstr "属性格式无效:{attribute_pair}" -#: vibes_auth/graphene/mutations.py:261 +#: vibes_auth/graphene/mutations.py:261 vibes_auth/viewsets.py:107 +#: vibes_auth/viewsets.py:123 msgid "activation link is invalid!" msgstr "激活链接无效!" @@ -86,11 +147,7 @@ msgstr "帐户已激活..." msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: vibes_auth/graphene/mutations.py:305 -msgid "passwords do not match" -msgstr "密码不匹配" - -#: vibes_auth/graphene/mutations.py:312 +#: vibes_auth/graphene/mutations.py:312 vibes_auth/viewsets.py:81 msgid "token is invalid!" msgstr "令牌无效!" @@ -336,5 +393,20 @@ msgstr "{config.PROJECT_NAME} 重置密码| 重置密码" msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "" -"电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" +msgstr "电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" + +#: vibes_auth/views.py:168 +msgid "the token is valid" +msgstr "令牌有效" + +#: vibes_auth/views.py:170 +msgid "the token is invalid" +msgstr "令牌无效" + +#: vibes_auth/viewsets.py:85 +msgid "password reset successfully" +msgstr "密码已重置成功!" + +#: vibes_auth/viewsets.py:112 +msgid "account already activated!" +msgstr "您已经激活了账户..." diff --git a/vibes_auth/views.py b/vibes_auth/views.py index efbb9a2c..b1a46855 100644 --- a/vibes_auth/views.py +++ b/vibes_auth/views.py @@ -1,6 +1,7 @@ import logging from django.utils.decorators import method_decorator +from django.utils.translation import gettext_lazy as _ from django_ratelimit.decorators import ratelimit from drf_spectacular.utils import ( OpenApiExample, @@ -67,7 +68,6 @@ class TokenObtainPairView(TokenViewBase): ) @method_decorator(ratelimit(key="ip", rate="5/h")) def post(self, request, *args, **kwargs): - logger.debug("Got to super post") return super().post(request, *args, **kwargs) @@ -128,8 +128,7 @@ class TokenVerifyView(TokenViewBase): 200: inline_serializer( name="TokenVerifyResponse", fields={ - "refresh": serializers.CharField(), - "access": serializers.CharField(), + "token": serializers.CharField(choices=["valid", "no valid"]), "user": UserSerializer(), }, ), @@ -166,6 +165,6 @@ class TokenVerifyView(TokenViewBase): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user_data = serializer.validated_data.pop("user", None) - return Response({"token": "The token is valid", "user": user_data}) + return Response({"token": _("the token is valid"), "user": user_data}) except TokenError: - return Response({"detail": "The token is invalid"}, status=status.HTTP_400_BAD_REQUEST) + return Response({"detail": _("the token is invalid")}, status=status.HTTP_400_BAD_REQUEST) diff --git a/vibes_auth/viewsets.py b/vibes_auth/viewsets.py index 09f9d4dc..bfae34a7 100644 --- a/vibes_auth/viewsets.py +++ b/vibes_auth/viewsets.py @@ -1,11 +1,13 @@ import logging +from contextlib import suppress from secrets import compare_digest from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.utils.decorators import method_decorator from django.utils.http import urlsafe_base64_decode +from django.utils.translation import gettext_lazy as _ from django_ratelimit.decorators import ratelimit -from drf_spectacular.utils import extend_schema +from drf_spectacular.utils import extend_schema_view from rest_framework import mixins, status from rest_framework.decorators import action from rest_framework.permissions import AllowAny, IsAuthenticated @@ -13,11 +15,11 @@ from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet from rest_framework_simplejwt.tokens import RefreshToken +from evibes.settings import DEBUG +from vibes_auth.docs.drf.viewsets import USER_SCHEMA from vibes_auth.models import User from vibes_auth.serializers import ( - ActivateEmailSerializer, ConfirmPasswordResetSerializer, - ResetPasswordSerializer, UserSerializer, ) from vibes_auth.utils.emailing import send_reset_password_email_task @@ -25,6 +27,7 @@ from vibes_auth.utils.emailing import send_reset_password_email_task logger = logging.getLogger(__name__) +@extend_schema_view(**USER_SCHEMA) class UserViewSet( mixins.CreateModelMixin, mixins.RetrieveModelMixin, @@ -36,36 +39,18 @@ class UserViewSet( queryset = User.objects.filter(is_active=True) permission_classes = [AllowAny] - @extend_schema( - description="Reset a user's password by sending a reset password email.", - request=ResetPasswordSerializer(), - responses={200: {}, 400: {"description": "Email does not exist"}}, - ) @action(detail=False, methods=["post"]) - @method_decorator(ratelimit(key="ip", rate="2/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) def reset_password(self, request): - try: + user = None + with suppress(User.DoesNotExist): user = User.objects.get(email=request.data.get("email")) - except User.DoesNotExist: - return Response( - status=status.HTTP_400_BAD_REQUEST, - data={"error": "Email does not exist"}, - ) - - send_reset_password_email_task.delay(user_pk=user.uuid) + if user: + send_reset_password_email_task.delay(user_pk=user.uuid) return Response(status=status.HTTP_200_OK) - @extend_schema( - description="Handle avatar upload for a user.", - methods=["PUT"], - responses={ - 200: UserSerializer(), - 400: {"description": "Invalid Request"}, - 403: {"description": "Bad credentials"}, - }, - ) @action(detail=True, methods=["put"], permission_classes=[IsAuthenticated]) - @method_decorator(ratelimit(key="ip", rate="2/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) def upload_avatar(self, request): user = self.get_object() if request.user != user: @@ -76,23 +61,15 @@ class UserViewSet( return Response(status=status.HTTP_200_OK, data=self.serializer_class(user).data) return Response(status=status.HTTP_400_BAD_REQUEST) - @extend_schema( - description="Confirm a password reset for a user.", - request=ConfirmPasswordResetSerializer(), - responses={ - 200: {"description": "Password reset successfully"}, - 400: {"description": "Invalid uid!"}, - }, - ) @action(detail=False, methods=["post"]) - @method_decorator(ratelimit(key="ip", rate="2/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) def confirm_password_reset(self): try: data = ConfirmPasswordResetSerializer(self.request.data).data if not compare_digest(data.get("password"), data.get("confirm_password")): return Response( - {"error": "Passwords do not match"}, + {"error": _("passwords do not match")}, status=status.HTTP_400_BAD_REQUEST, ) @@ -101,53 +78,38 @@ class UserViewSet( password_reset_token = PasswordResetTokenGenerator() if not password_reset_token.check_token(user, data.get("token")): - return Response({"error": "Token is invalid!"}, status=status.HTTP_400_BAD_REQUEST) + return Response({"error": _("token is invalid!")}, status=status.HTTP_400_BAD_REQUEST) user.set_password(data.get("password")) user.save() - return Response({"message": "Password reset successfully"}, status=status.HTTP_200_OK) + return Response({"message": _("password reset successfully")}, status=status.HTTP_200_OK) except (TypeError, ValueError, OverflowError, User.DoesNotExist) as e: - logger.error(str(e)) - return Response({"error": "Invalid uuid!"}, status=status.HTTP_400_BAD_REQUEST) + return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) - @extend_schema( - request=UserSerializer, - description="Create a new user. An activation email will be sent after creation.", - responses={201: UserSerializer()}, - ) - @method_decorator(ratelimit(key="ip", rate="3/h")) + @method_decorator(ratelimit(key="ip", rate="3/h" if not DEBUG else "888/h")) def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.save() user.save() - # send_email_confirmation.delay(user.pk) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - @extend_schema( - description="Activate a user's account.", - responses={ - 200: UserSerializer(), - 400: {"description": "Activation link is invalid!"}, - }, - request=ActivateEmailSerializer(), - ) @action(detail=False, methods=["post"]) - @method_decorator(ratelimit(key="ip", rate="2/h")) + @method_decorator(ratelimit(key="ip", rate="2/h" if not DEBUG else "888/h")) def activate(self, request): try: uuid = urlsafe_base64_decode(request.data.get("uidb64")).decode() user = User.objects.get(pk=uuid) if not user.check_token(request.data.get("token")): return Response( - {"error": "Activation link is invalid!"}, + {"error": _("activation link is invalid!")}, status=status.HTTP_400_BAD_REQUEST, ) if user.is_active: return Response( - {"error": "Account already activated!"}, + {"error": _("account already activated!")}, status=status.HTTP_400_BAD_REQUEST, ) user.is_active = True @@ -158,7 +120,7 @@ class UserViewSet( logger.error(str(e)) if user is None: return Response( - {"error": "Activation link is invalid!"}, + {"error": _("activation link is invalid!")}, status=status.HTTP_400_BAD_REQUEST, ) else: @@ -168,16 +130,11 @@ class UserViewSet( response_data["access"] = str(tokens.access_token) return Response(response_data, status=status.HTTP_200_OK) - @extend_schema(description="Retrieve a user's details.") def retrieve(self, request, pk=None, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(instance) return Response(serializer.data) - @extend_schema( - description="Update a user's details.", - request=UserSerializer, - ) def update(self, request, pk=None, *args, **kwargs): return Response( self.get_serializer(self.get_object()).update(instance=self.get_object(), validated_data=request.data).data