From b05ebf843a6deb2b1b3ffa0c27d198b53c239187 Mon Sep 17 00:00:00 2001 From: Jac Fitzgerald Date: Mon, 26 Oct 2026 13:06:37 -0700 Subject: [PATCH] i18n: escape double quotes in prop2po output so msgfmt keeps them prop2po wrote values into the .po unescaped, so a value containing " ended the msgstr early. msgfmt.py's literal_eval then failed (ERROR (skipped)) and the .mo stored the wrong text: editsite.options.subscription_email kept stray wrapping quotes, and session.options.site lost its ("") in every locale. Escape bare quotes in prop2po and regenerate the catalogs. Co-Authored-By: Claude Code --- bin/i18n/prop2po.py | 6 +++++- tabcmd/locales/de/LC_MESSAGES/tabcmd.mo | Bin 20097 -> 20099 bytes tabcmd/locales/en/LC_MESSAGES/tabcmd.mo | Bin 24692 -> 24692 bytes tabcmd/locales/es/LC_MESSAGES/tabcmd.mo | Bin 19838 -> 19840 bytes tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo | Bin 20281 -> 20283 bytes tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo | Bin 20125 -> 20127 bytes tabcmd/locales/it/LC_MESSAGES/tabcmd.mo | Bin 19991 -> 19993 bytes tabcmd/locales/ko/LC_MESSAGES/tabcmd.mo | Bin 20295 -> 20297 bytes tabcmd/locales/pt/LC_MESSAGES/tabcmd.mo | Bin 19146 -> 19148 bytes tabcmd/locales/zh/LC_MESSAGES/tabcmd.mo | Bin 17342 -> 17344 bytes 10 files changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/i18n/prop2po.py b/bin/i18n/prop2po.py index ad950353..09336cb7 100644 --- a/bin/i18n/prop2po.py +++ b/bin/i18n/prop2po.py @@ -4,6 +4,8 @@ TO DO: contribute changes back and go back to installing from pypi """ +import re + import click from datetime import datetime @@ -47,7 +49,9 @@ def to_po(source, destination, encoding, language, project, copyright): parts = line.split('=', 1) # TODO it fails on comments/lines with less than two parts after splitting try: - destination.write('#:\n' + 'msgid "' + parts[0] + '"\n' 'msgstr "' + parts[1][:-1] + '"\n\n') + # a bare " would end the .po string early; msgfmt then skips the line and the .mo keeps the wrong text + msgstr = re.sub(r'(?AEM1*RjNJ|cFoDLQw8WjxUs#;ehqy`ehQI;mA#@Yx2D=~42TC9>T z9XeYYqga|4tQP-)?=PJ`?=NqDd7tMpu&x5@?K)Jwlk~nO84p}(8h>#fqZz3W^O(jx zoWNV0!dEO~3msfsmzMDmd+-4h_=Gk#F@;}f{`Y59Rgz&YD_vj_eQe=4&TL3ymgM0s z@3UNI-#~N7&Jz;%aRJL%!x}zfW>cb@zR?7q^rTN*#Se@Y&ZSv~p8_FpXiJKti!bQo z5q57&gLsU?Siupz!4-T))2xk47}@DG_Rt(YMfs)D{olZ7y*C_7cR5Zy?w*AI0q%D- A{r~^~ delta 390 zcmXBPze_@46vpxAHb{m@a;c;=r5b{$AW^6Y)KYI*(T|~)DDf^KI5@OQ6uC-niAq9y zAT;y`1P+ZYLPKj?|3Tjuhr{Q*yd0i$?poGu%X+;ZtJWobq@+hYOG}IRi)(0aOJ2-k z0*^3^HJry6EMXt#Fuo&g;5mA*ff0PdX?({RexaH7W>nPz&2mP%!4oWCA49m5m1Zo- z!DHTTZutL(CMf7g6L^YoyvAqjU=vfj6n>*wJhDePZs8}|`LeV^^OKiWaeQBz#Uys| y5-)J%Knma$+E~FUe85d?qq%H=>*zlmUhJR=E}{yq+xYVbd!xR|L@$~y`u+h56*XW0 diff --git a/tabcmd/locales/en/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/en/LC_MESSAGES/tabcmd.mo index bbfac751abc90f58d8776b654d79ad37ea0e99e2..080d30eebc5918466ed5c9aa5a652fca4515e0fa 100644 GIT binary patch delta 827 zcmXZZOGs2v9LMqBxRB5+v=PTgq7IEuBBF`L#+FPNkbv2 z9k;O`1GQ2I&R`5rFcZUfr4nq$0(^lt@jV9c3s&L*Ucw9ElzDiMIDiA#i{tn+EJvd( z5_OUvPq7KToUX^Gn2)orpD{?hg*-~IEZ%7G+F@*Sc>0~A?p~w zq2Fnc-r5FMU~i*TjUUiPx{8-Q(vchgdLTV!-xrm3FoB&Ien?k1i8pWqE%7;C!yLwX z9q*tO@*LaH8Fd%CNDcBgOXN@jyYVAh=jkodEqjl4@e_<-ACBNMGHnGPkpy3({kjFT zQEy;5?z#Jav5@@AZ~ebe5Uuid(^b delta 828 zcmXZZO-NKx7{>AEVhb6yD8F*dFlBW7Ktw7XwP{LoOlzPoLO~a99MM$ZpybPC+AsTo)p&>t zSVFt(0!vtmYgmVSSZ@(>65fI)e8h`>9KpBQ>4M`1rz)L_Ja($G-y-?N*9+E%SU8s#PVq8L5Gfn8ehww1CHGVH+KM z!6^37MzbR2aSHu>fiB+S5PsqWb}@#5tTcz?=sa9^jeVTKvCXB$nwAmT6f**d*8x=u#0Eq9F)wky}HgTMbc8 zVuRq^H^?tgEiKJCv}V7H({tVz4xDrOVE*n+yE@`Jl9FlZ23xp*ORG`>57EK~#<7h- z{6-u5SVVhmkS{PvencO>;|zY`6q<|_!)f&T-HcpC861jJe8MA~SeIt;3P+9ff*a)5 ztW-c>Zg5}`1LPWdhd1#SKk*umSz5s#oWtm*^noR;V_}luVFXL4gL1jv^9MV_)>*vcrj7Lv>#sNC diff --git a/tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/fr/LC_MESSAGES/tabcmd.mo index ebd31ac007c51d5798048f5fa750f50b46d2807d..d54bf362d0303900aab21a127e76db1bcce3366a 100644 GIT binary patch delta 393 zcmXBQyGud=6vy%3ZIGTzqu6iuytFLybga}H-X=REa{=brI!IbJ`PWX7ahY+x8eacLX#=*2cJ z;~mc902gqGMI1{=7M@}Ro9Mwl2JsC8IK(ydB;EN)QgyA;DAA~58*8XNci;@aDLZ(C zSNl={KQM|b2htQ)a1$@Ei#E0}my&kz6Mg7UOYa!Q1{#@)v`%uJaW8+xMd}~CM>ETE z_=wZ!%}F!3gtNGTJD5f1vL-s8dqL+ze;7jFA>pK4zWFuh?9s{e)`(@<$FZ-8e_ZxB A@c;k- delta 390 zcmXZYJ4=EA6vpvKkP2@hB1%+3(U=iRUZNJuF0WP)L0}HSJBCONfs2c%5Khq&<PfEJODlXythLpfVoWur( z@gAq~181;{Cpf+-&7p}&tl=2GVF=%G3cDCVdwRGZPphnD1~~>rY~Tg{jTX+gq#yDP z9$;l#I>t|2!|;ye#xq>O65ir7USVceTE{Q+W5AF)xQKNe7zHUxQ_l=9f5lmH41X~j>Bi1@feLMdF)_*!t diff --git a/tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/ga/LC_MESSAGES/tabcmd.mo index d6eb5def1413be61b0a56e0e840783d48434b6e6..05890baf720d303d0a0391b353236940843ce743 100644 GIT binary patch delta 393 zcmXBPJxfAi7{>9-1`(595Go@KPZkYPfsmSuFKMaeR*|3(9B4{tsv$Tb&JNYma4>2O z3LI(*Y4Rf|PEES@4f@Mjp5J|O-#qv8*tV->yFMCT>q=5DEj6)_kv6f9QS|IdbC|?k zJjGSK$94R|GyFvZ6Io}jif-}~F5@#UVh1BQz!jX%$* y3|nWhhJL)md3?kKzTx<1BaGuxNebZ!uHg;p+%zBlrWV>BUm!YR80}EzcJdz-9yi_q delta 390 zcmXBPJxhXN6vpw(MZ`>qKvSeBQyjvIAT>d#CtvbysfMJ6!lt6OTB0YSIV6Xsr^qo7 z0zsE(Xy_|clauX!gZ}a?_wQVs!+q}i*>YHxFJU&QV;pDn>f(^6>38p2F zA?0wJcqb$6V+-jeUsm#?g$sCy*LaT?IFplN*hafgAD_{mm#WyyA325N4d;VL3{iN+ z27X}y%bSuHzi|XzThcg=VI1et-s}KZu#Q1|L;EtnsJ&wG=EpP98Far#U8dRTCzjp+ D*E%{f delta 390 zcmXBQu}eZx6vy%3TcSjyQYe!wgh((*D2Z~iG|OxV9u0~^AXJ0>0S1cT&=LeiB0eIT zY!h4?oEuz%mZpZpr67oAzmGS4?m6dj&bhZ~84b(m)Lqqzq`QRFM(?&1!556-5GOFW z}#&HGhm!07zS~!pIX#dO~>ZDk_{q@Xt$K4;X?pI>nJp$+K BIg|hZ diff --git a/tabcmd/locales/ko/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/ko/LC_MESSAGES/tabcmd.mo index 2a7894f0c7357a00e0ec80b56ee1aa349e0a79bd..5fc152abc3af60945b16a49f3a5fecf3cda06cb8 100644 GIT binary patch delta 393 zcmXBQKTASU7{~G74a%qtq_8N+yr@%9P;e`u#Zv3`hY*(_C~}H09Hcgfn$pQTMPv{( zhNADF#oU7E71Sg&_zLQKaQZyY;m3KNbJ{hlQ?nYkBc(e@zJ%mq6_+u#DJ|g<`mv1L zc#pIAjbZ%5a|~}uHdb&Q>o|m63}FvvFp%uuzkrkUCrOnQr6_W6h!1#!zi0*&Qqm84 zc!1YwX%F9V1A}Z8#4N7j1-{}7<}tI=&%NOsz2!99TWG@p`f-ShI2)VXzlLu5^O&kyr6_Zd#s|E@Uo-CrLWy&)K zFoz#Fhbw2&JZ_-};)tKQxh3vv<(;Zn5J&>R+25aeQ5t2RYb zaHp2mqWS<4NQ$2z`U3qgI{i53aGvMA>iewvp3Z}%6G?_8mGKrQaXcl>;THDbCC*?O zqxgabeq$E@&_p{eC2$YDzd8=%0}kRF#ZBX@C(Ng1x6g0`z58*$X}U*NKJ*WY@i|)n delta 390 zcmXZVF-t-L6vgr55@8XPNG}B|iQxHik&>z%7Wzpf@Bqln|7-DL6=@ z;?UAsLpn!`i66ml(EpLs@7@FV+^A!3%_vvr}^p>`H!V-%whm-Y+@brXlDK&HPFM} o!A1PQ2oBKcSvryS@Dx|DjH~#Hy0on4@to0}o-KyD*YS&)Kb<%@y#N3J diff --git a/tabcmd/locales/zh/LC_MESSAGES/tabcmd.mo b/tabcmd/locales/zh/LC_MESSAGES/tabcmd.mo index ff3767c3a6a425f366c615f9104fbb8a8377ced6..4e452117fe52e9a13311e9cd7424b71cf1fb9206 100644 GIT binary patch delta 393 zcmXZXJxhX77{>AIX-Jbusv$Kpc*vJQYDkgnu}rrRf@o<7d;_;6XcKY~bkV?QX$jhc z(p?-3`Upx0wkY1X$m1t+luS!Lyv8whkl8xr zw>|8l>3c^L!y1MTd5ia$zz;O@f*GleNvz{2!`dMV=SbSY5(cq{Pxy)#c$Srx vv5%`b#xJDA4uDLh_g-er>Ah;#E8n^@s8U!vbF0Kt- zaF?j)PjG6EAPAft^!sA)!sl?{ocBDh4bQOQaUZ<(Ye`48bcb!+zzObSASo@PgS(i; z2$s>0k9dkbjNunDswpm@osy!M#t;_p5btpf-IVIurg*1ufj`KTbs`0^iXYfQcIt}X zjE>?*pZrOVGV~4v3Dr!v~+;CxQS2L#}~|F?p#_$ r7uWF(12{r+*dLl?@yz_d8#D>K|30G%#bRgd3l5f6N{K