From f38112f3df7ca2bd7912ede0766482e1e59b354f Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Thu, 28 Aug 2025 15:31:43 +0200 Subject: [PATCH] Pull markup out of translation files it's bad enough that we do markup in views.py See #161 --- locale/zh_Hans/LC_MESSAGES/django.mo | Bin 11420 -> 11516 bytes locale/zh_Hans/LC_MESSAGES/django.po | 27 ++++++++++++++------------- projects/forms.py | 15 ++++++++++----- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/locale/zh_Hans/LC_MESSAGES/django.mo b/locale/zh_Hans/LC_MESSAGES/django.mo index 4af61861f703d3ceb01159ea971f1694cb40e950..386cfcffb862c56cfa694083ed258f80ecf1a4b1 100644 GIT binary patch delta 3951 zcmZA32~bs49LMnkC`bY>skxOm7Z6w4tW;cb-?!34t*}sV0Sh$E>}jInk{e>Em}!Aa zE(PWipe^I1O=CXn5d+vP{jsIwY$LvR|7LJg<_ z`Ew`vP=}wRCi5F)Ebcn0ov0fL{kyspbU^O0gc?w9a|BMMJ_%Ft1nSl#aGAGa z54;5*LB4VU)By8Q1KWh^rxfqjKq z8y8Unx{ex9_)Y#mYol&KJq)cG)N#pHAA}mfSk!=~1SqJ1HD)1d%C@6A+J&03!}k4g z)YEVhLjy7|q88T`)bYQgX0&Ewzx|uA8Fdf&bKUvS3`DCU(JW)Ij$j#|2zD1zqtevkG+u)u;h{ zfm%#oBeU)PKsC^i;p+e9-7gmXGarwxT=k}u7dmDB92j(Z{8ISqb z0YP@iYq%f(Ky|c_hgl~cHjkl>JAoPaq1C&y(zJh&Io5m>^|;MKwX@J%hH8Jc=3gfk zvO`x|jH(|oPvAW2AL1Mw+RDGOcaX_)pCY%_{ft_qjavI1wL`UYo7uzm55XGjA8qw< z0SX$)L$)Iwbz+v)pEehxI#^-#7tCVR@q1D29JT%L*#7sdUTyWW<~OLB3H)RS)N12D zUUg6n#iJTdGLum!3^r3Rg8DSnz0XA5^G%q52h3{Jn)uVcZyfJ0)=tO+6>!5S=)??+ z!~m+}rB=_k`et*d?LTPsa-<=5(&|C`{+iW)GHWs_impCJ;=LH7=f78|z~f`4*a1^f zGm(i}8*^>{N^?DGMmC`ayc>1gA^ZLmYK>H(*2wp$_e^YCegQE7`_RA3q@V^$Q5_yf zjqntzgDU&}OWS|d>OY!ciT?R<$U1b*Q0MnV-J1UP{o|lAnKKS4WluF*40rgs@?#*<1OX{)EX&7-J&9V5|5x>SV`@ff4%8OwD;e5 zGf`_{C62=Fco+VFw_{=le{oGjb(o9lV71lPV+{2otM4|;@CNo*BJ16qM7@Hqc3}R) zDCoVeZI@5zeXrtdtKWv>t*q7Djj*6Y+Yqxh>Mg2mppVPLG&0}ny4~6)__!w8!ECsG zq&Hbb{@yaJFa>v#`-tw}y`&G(rk~WpP|3N?<~r1@Xq!wl!wbk`WENRNv>-c^zyo~f z9_lT}dirP6^b9AuU)r80Ib<5yK(x}ey+8(sO8&2(iepG!@(ke(?d~LZkfB6dE_s=7 zSN#d;p}lOoiSGMaq6Lyd`jh9#f45#%8HEcj~eSC z^jqE*i}hG^SS)-Nt6ytbE1p1WzC+4RHJ=yJ zU`gKjye;R;-v}OA7(BA){FWV;3%8Xed#$4z1S^kU+_1~*J7&0dVQaBPQd_8+@gxnF&_^GjaKKi#}>{^AZz{sPV- Bo$3Gp delta 3871 zcmb8xc~F&A9LDh@n_%uJAxd7s#0@b_+z^*=OED2EC4~@C6a*DiwDOuM=7MIZrMcyn zX;}@;)TC)MPEO-Y&A2pU^3MFH^kEzjR~W%CYBqwXS|%Y#DHBRPTX z@JDa#J3{R>eu@e1mO+pYc)cBFpN_TNL@xB=6bfU!}`e=HkA*r5yaQH!w*^$6ypI<^e8 zHddlKvZw7fSTdEn1=pH_V#9DENaB7P>W>~YGk`n zYhgdCW1pfraLo39gBtNE)b$rI4sW2YZ%VIIFbdVt4Agl!$bkK>*xPVrs1Yngbzli< zF;(F+_%5n}+o%x+F$|5c1?onzsO#dfJ9fiF%tbxYDqM=|kS1Id)8f78}rPv#9U@~^#>#;9RKt0>_sKvJf)$v`n{{X6EpP^>%E7XjfK+V(*>{rjZdl;+t zKZTW3f#XnX;9K(yYPFt2U3e4ubARxmhGW`#=eIYzpw3IS`T%n%YDO~5MX2*WLO+9Z zhuP4L&YIUyH+X>RP`J;t33jF)g}g~_5UQc)QRhuDi_AHw;|t76JV?D7)&Agi%)c%i z#mg(RP#0w5bev}OljeEznt2!XT7@#dy1u2^26cmYRC|f20rs_ehM67br*|Bf#*TUT zBWh&hgF!Bs0}J z;6_+|4630?R$pMpE3IB-Zbtsxdwhi9cc>A5Z(cNSVHo@GV}#!SV1}c`(Fk?GXC|O# zq#LTCG}L(`?RXAqjTE5P$THLy%T64Mhw&*4?&w`V3^n!RQ1{8fCfwf@*a>s(z!Iyk zFgKdJkoDs}Mm2B-^=Qu7@vu%_ha*wP<53;&Z2Nm*1odH7&qV(ScI2_46Az%iT0h4K zJb{55S^XTQvj2)1$KAC?a&bQ9qn`aa)HmuqGrEhnc2Y2t{iCoaZtKGQC$n*e9n6-i z-_^Tu5~|@oR_~7usSmUII5P)XpRN$~<5Y$9P-O*4BddwN{nnBQ@)l7iS&tOvU$4au zZBsgU1b(5k+288JQLB6?d6m3RR*?~8BGK=HW=_vLg^VOwL?xe$C40yq!dFb7Ji%v6 zJ^#U8J@7x?EVi|X9xmZjUL*W)xxHi!(ZckRhszsOULq^WIPy9fPtr*#QOPC4$N-{8 zp!)~POg{C@wvZ`A--<E@?my?C6P- z*Q-iz57)~S^GO9sCSgP++r#z4(d2E?i7X=tq$7Ej1d&ZORgKGoYNDF`7Cs;~&sR97 zU~2!k$IIe;`Ner)wGGN2(J0i*EVA4|7!B5gGcJVJZP<5KD6iZmq+W??@P}b cU0vJhaLwnPLxX~^Ec>L|7aLuDscWmh0XtKCqyPW_ diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index dcc4239..27b70ec 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -342,22 +342,23 @@ msgstr "超过此数量的事件将会被丢弃。" msgid "DSN (read-only)" msgstr "DSN (只读)" +#. Translators: {link} will be replaced with an HTML link; place it where it reads naturally. +#, python-brace-format +msgid "Use the DSN to {link}." +msgstr "使用 DSN 来{link}。" + #: projects/forms.py:103 -#, python-format -msgid "" -"Use the DSN to set up the " -"SDK." -msgstr "" -"设置SDK以使用DSN。" +msgid "set up the SDK" +msgstr "设置 SDK" #: projects/forms.py:115 -#, fuzzy, python-format -msgid "" -"You don't have any teams yet; Create a team first." -msgstr "" -"你没有任何可用团队。创建一个" -"新团队。" +#. Translators: This text is followed by a clickable link. Adjust punctuation/spacing naturally. +msgid "You don't have any teams yet; " +msgstr "你还没有任何团队;" + +#: projects/forms.py:115 +msgid "Create a team first." +msgstr "先创建一个团队。" #: projects/models.py:50 teams/models.py:9 msgid "Member" diff --git a/projects/forms.py b/projects/forms.py index 7fbd460..fcc08fc 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -4,6 +4,7 @@ from django.template.defaultfilters import yesno from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.utils.translation import pgettext_lazy +from django.utils.html import format_html from bugsink.utils import assert_ from teams.models import TeamMembership @@ -100,8 +101,11 @@ class ProjectForm(forms.ModelForm): self.fields["dsn"].initial = self.instance.dsn self.fields["dsn"].label = _("DSN (read-only)") href = reverse('project_sdk_setup', kwargs={'project_pk': self.instance.pk}) - self.fields["dsn"].help_text = _( - "Use the DSN to set up the SDK.") % href + + self.fields["dsn"].help_text = format_html( + _("Use the DSN to {link}."), + link=format_html('{}', href, _("set up the SDK")), + ) # if we ever push slug to the form, editing it should probably be disallowed as well (but mainly because it # has consequences on the issue's short identifier) @@ -113,9 +117,10 @@ class ProjectForm(forms.ModelForm): self.fields["team"].queryset = team_qs if team_qs.count() == 0: href = reverse("team_new") - self.fields["team"].help_text = _( - 'You don\'t have any teams yet; ' - 'Create a team first.') % href + self.fields["team"].help_text = format_html( + "{}{}", _("You don't have any teams yet; "), + format_html('{}', href, _("Create a team first."))) + elif team_qs.count() == 1: self.fields["team"].initial = team_qs.first()