From 97c96be2764f3e9fb33d0626acf31b96d5c696a5 Mon Sep 17 00:00:00 2001 From: SirStendec Date: Fri, 12 Nov 2021 16:58:35 -0500 Subject: [PATCH] 4.30.1 This release cleans up some English strings, and moves us to a new back-end for translation. Now, translations are cached in our CDN which should reduce resource usage and allow clients to properly cache things. Translations are also split into chunks so clients can minimize what they need to request at any given time. * Fixed: Detection of the subscriber button. * Fixed: Remove references of non-standard ICU format `en_plural`. Use proper `plural` tags. * API Added: `i18n.loadChunk(name: string) => Promise` for requiring a new chunk. * API Fixed: Allow settings to have a `null` i18n key to disable translation. --- fontello.config.json | 6 + package.json | 2 +- res/font/ffz-fontello.eot | Bin 32844 -> 33276 bytes res/font/ffz-fontello.svg | 4 +- res/font/ffz-fontello.ttf | Bin 32660 -> 33092 bytes res/font/ffz-fontello.woff | Bin 20268 -> 20448 bytes res/font/ffz-fontello.woff2 | Bin 16880 -> 17092 bytes src/addons.js | 2 + src/i18n.js | 112 ++++++++++++------ src/modules/chat/actions/types.jsx | 6 +- src/modules/chat/badges.jsx | 6 +- src/modules/chat/rich_providers.js | 2 +- .../main_menu/components/profile-manager.vue | 2 +- .../components/setting-check-box.vue | 2 +- .../components/setting-color-box.vue | 2 +- .../components/setting-combo-box.vue | 2 +- .../main_menu/components/setting-hotkey.vue | 2 +- .../components/setting-radio-buttons.vue | 2 +- .../components/setting-select-box.vue | 2 +- .../main_menu/components/setting-text-box.vue | 2 +- src/modules/main_menu/index.js | 17 +-- .../translation_ui/components/i18n-entry.vue | 2 +- src/modules/viewer_cards/card.vue | 4 +- .../modules/chat/emote_menu.jsx | 4 +- .../twitch-twilight/modules/chat/line.js | 4 +- .../twitch-twilight/modules/sub_button.jsx | 2 +- src/utilities/ffz-icons.js | 3 +- styles/fontello/ffz-fontello-codes.scss | 3 +- styles/fontello/ffz-fontello-embedded.scss | 32 ++--- styles/fontello/ffz-fontello-ie7-codes.scss | 3 +- styles/fontello/ffz-fontello-ie7.scss | 9 +- styles/fontello/ffz-fontello.scss | 36 +++--- styles/tooltips.scss | 18 ++- 33 files changed, 183 insertions(+), 110 deletions(-) diff --git a/fontello.config.json b/fontello.config.json index 4bfe01e2..28cc0f55 100644 --- a/fontello.config.json +++ b/fontello.config.json @@ -779,6 +779,12 @@ "css": "right-open", "code": 59462, "src": "fontawesome" + }, + { + "uid": "a2a74f5e7b7d9ba054897d8c795a326a", + "css": "list-bullet", + "code": 61642, + "src": "fontawesome" } ] } \ No newline at end of file diff --git a/package.json b/package.json index be8aa81f..d5b2b4e3 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "frankerfacez", "author": "Dan Salvato LLC", - "version": "4.30.0", + "version": "4.30.1", "description": "FrankerFaceZ is a Twitch enhancement suite.", "private": true, "license": "Apache-2.0", diff --git a/res/font/ffz-fontello.eot b/res/font/ffz-fontello.eot index a3d19d54804865cee60a6e3e6cfc654333a73436..b84fe1d0ea578fa76147e7387f366460dfa9bd41 100644 GIT binary patch delta 2314 zcmY*aeQ*=U6@R-c-Ra{j`7GTDTh_-}wgr|@h$Y#8KPo4#Nr{st!2#odiLq=MY#9|? z4|FnBKA@#cU`VgSz%)%}I%y^oNQa`9DGVtYrlBe!E^Qg=$t3*2bSOy^k6{RDsV(~M z4q9@1zx~~NZ?*f|_x4WbpQm##QEu)9fX)|Q;hIdRoiCbSNgc}f_M8PEPXNHPgV}-H z%+KEV6z!t`{PDrbi6Hv%+WInfj^SJ;yD|3f@1gxFnnGq^TMqr@XzxU}WX5(3Ke$|) z2C$9*^j{bm8b}8|ixmJymSVhV1Ra(FdmL@;ceNwgiS50k(|0bR<0rW2t7BUR2Xa?_ z^d7+GB{<+hc3^vseC2!wU=&RVjt^vq+8*xz673)WozHFAHqrFxzIOq}(Ke-XTZeMr zKi+a2;Q6=Iqhu{JvE8abSFArmKEU4-#Q!gfk7fizL=h&O@vInTU~)QsW?!==PHqA|~32 zM~pYNlQu%mkbZB>JO37Tc;CJYvcG6JN&+&8Vpo+eT|_G4cJ&hpOcUfnL5kY5bWz^# zr{GuoN-*H7ULZ?u!3r+wvg!)%tsPfz(WHoa%!(93uMdSK;}Sh}PXO)J*PY)>dvz_O z|292^E?oyQxrtp`6IU!20pE~2hZ$ocI07i7JM}F>C^)byCk!VyGgCLC6joMyRp+vB zzE*UL?pltkj<~|j9$snmYYLKz$IN?_WJtpF#1-Dt{I`=QyHeyGZK=|#6p41FN~_Y^ z>hGkwPLkJ8oapM%6?7E4I*OW@j;<4!7F`aV(d3|-zSJ5!s`1&ZjL~YWDYJB!3DmUG zTc!SH*#r4XkE=o~xA2@96+84&p&m&Li6IZK$zvXTG)jh=!gPNCr~Ss$a#$wYHI^~9Sze#%QS z@1Wrj`C&G@wgPbnS>l-9zFj~qT&_er-A*Gxa&t}Q~68-~d1%0kC z+3Dr;96nxTpVEJT1w>Gw0hYr`*pOP++1kQv_C%CgtX>y2nOQg3!N%Eb8QccPcy1G> z#X_x?3~r1PMmGU516hlob`zLQ86ZUam=JjKk*?G?mNwP7B#-QJyD9|SXS17&5!{@d zPrA99`b1NsOe8lKR%+_oNTR7(LHqsyzUF!WlOZ!4$lqsQYVT|R-_0s)mia!5&1Ru* z^1|E~M&RpSa^H|PAr(#0)^)8kbz`wUP3fPbynsVSc^eTZ+;ficHXE;XMAjqRC@xai z|7g)$ZGO>tdV{m|OK>v$>H>W7>&cqC98xDT%_LJel1UKtfM` z+w6+z4b$i5PV+hLaqcoV$Jg>{e%cbW?6bP9mu+v`yX_Z*M}(=e-<4f;j604yEzZ}R zSIQIRTg#`#%@yk^F1mi;`p7M~PrB!%w6sT>l0KK0$h+lZ@>NgFv(xkOg4P8GE2EYD zRZ#Uy@4~0NzxCd#zU1rk9rIoD=lr(x<#q z@cD%k3uhYShV7Bo$hGL|#pAKg*mJR;$4U>3=zr50_*0>J^D;&<>gw!yN=6Db<7=p3 bAKSETV)4fBj*SgX6n5k)NMY}HPCNb!5121a delta 1799 zcmYjReQXnD7=PZow%2y;+Uxh%wq6S@N5^38K7a$$!7`9+hz!O+7%S^OVC!fGAz%n2 zIy50jz#|JF3ekjM$Ou|8Wtj$v%m&JWx?n<(KNh0XDCx++IoBnZuN-`Y^z$?vtuAg;?2Fa58$Pd*g<70J07M>Y5U<%txxqHvv;@H9fKnH3?U9zh=d8l9L2RJk-UL~7pLcc5O zs8zKa$Q}GYLC8&sL?a3j3VhOtJVu5wD$OcH*3QNi zK9T`zksr%|*N}ga0a&o?pEBTeyKMdfYCD-C|;mS_TZ1K{IP8dquc#St(l*P;yqkPnAdfTxrBg4a$a8JvvQyQ}t*& zMH;54LD^T}$pkv5(Kszx0|oHnGELJg=)n!u(N_tfKu^qsG7y@$iIP@S(-Z}3Tu!le zNwC|`T3GWOmC6$`2g~gY7q+2uDQ8zQcCOTKwb&vYV=w<{V4x~W`lL11MoD2+bfz|r z)_u{c0doHO^{NWVzam{#k;WaVsJbqvK|T3DjV;klT1>;OQPVW#B7~-^bvcw`jng5L zr3)MFR@@K+qf#m`Q~hia!Zs`GXZ?0YN{Y7Q?QAtLl^}H#(@3E+rZgN)VIH%BIx6i5 znLu~UXQrltOh|>1qcFzCjQ%Tp7y~Zg;CRX-j;=h=>~_03H^-XimikzhHRh-aLL_4K2mRKF zIq3HV@C20MNxR3S3gULIjNmI}nB7VeEp=S`}(z{h8%6N&e5#W!(eCfSSe6SJo= z$qT7WCC{XaYrb=P3i>L=?S^H~z(C^*3h?lg4*br^ELwJ!la^HV&JrT_>}u~mOMa); zQKztMHhM9Ak$$AOpcqp|l|!mEst2k`#>+G^BWjQOsK%&ypuL#0Iwzy6)ZNw(=tpyR z<$i8Z7|t3V85bEljU#M}sor$Y{FeE?MQ!P~Oj;YQ?^thJ$83eR9@`b$sNHApvJW|Y zjzdnPbA|J<>wULwz5AT|foC9Zao&l%q5QS^BL$V-us7|^ayBmQ>+wDHH~RbMte6`Q zr~~n!E_iKT5nsoDIsag2UZ}V5%7UH+g9}EBUMaeS%agv{EpRt=qkRcYTEwZ&Oe(#5 P6O{^enMg|5^G)u5x!2jB diff --git a/res/font/ffz-fontello.svg b/res/font/ffz-fontello.svg index f7569219..029fe910 100644 --- a/res/font/ffz-fontello.svg +++ b/res/font/ffz-fontello.svg @@ -158,6 +158,8 @@ + + @@ -209,4 +211,4 @@ - \ No newline at end of file + diff --git a/res/font/ffz-fontello.ttf b/res/font/ffz-fontello.ttf index c5dedefc7db9d8393e739dff7e1f6c6056498165..b65ee43f0a5abd85f808f39bcf1a624b628e1afb 100644 GIT binary patch delta 2230 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 A_y7O^ diff --git a/res/font/ffz-fontello.woff b/res/font/ffz-fontello.woff index 7029d05179fbcd38a1d5c185526e0935e9abc365..d3da1da101be9c740dd6ced02896676442489170 100644 GIT binary patch delta 18106 zcmV)uK$gF(o&n&W0Tg#nMn(Vu00000Pv8I#00000fkcrMH-AI`003Y=SX9PiZDDW# z00Gzl00Ped00*}2ouuhwc61;B00gK2000XB000gE0001HaA$1*00guE00!*<01gad zF8O+AVRLW*01Ko5000O8000O8000nYYVGb?XlP|&002o;0000W0000a2(trDXl-002rH0002c0002caN>!;ZDDwD002tt0000W0000W0rwAEZeeX@002u20004i z00090JwsmgaBp*T002yk0008j000DJHcO7ZaB^jE00RI|WRpw*Oao!=V3V5xE`NCq z<7uEUBZ?v>0G4(Qr+A#*)JboZWdOzT|AopVDwM%OD=3qw3}Qt@Wh%&|fHO`&tJp<9 z412;yfDb{85W@;&!-lR1IUC6H+zljzz9F`}UjzyaLR&O*R0t zrs?@Ndbj*)Z|3#cESPzHpm)j7KY!+Jzi+7ymP6%SIbSZ6E9F|5E_ce^a=#ANp*m7W z>sXzrQ}tq1eOMpW$Nk~{%_mPlJa_8$%&B|NoEp!m2RU`UJN3eko@0DBK1V z?ga`r1ckeT!mUB!{-AJ^P`Fbl+%6RE845QJg}aBsEkxlyqUaV+;eU>za9dHhwqf9s6 zJ<6TN3rM-!cnc}_8e^{_<$mLRqz*P-O6pMK&7_VrUQg<1;~k}rHC|Nec;juQPBdOw z>Qv*srCw~jyi_&bVCsX$YfOFEc$cY<8oIyzxbargA8x$b^shJGZ~8YHFFF1H8gDxN zn+=ms0h%U;ce9@a3kQE(#dR-SRd>JLefxIzU3zA^dwTELG&AaTq#2D``)D+yStPU} zAp`=U1rS0=V2~_>Bm)7&K>bdt;-MZaXr>f35|Fc{|33>b9*$;o&Ns=XrdRw~1R7Aq) zm_Qj}Cn(%LWW_8?lv}%VR*=f+KC0j$UtUZLc&HZJX$=n!+;$!I!{C_NV?Of?9L7vM zo0rPL;4{wz_d9s;?6bjlHw^Y-1A={eNc>;I8uC3dzux=Bk3DwR>g65zs3s6PCW%xa z0y#khCY&IQ9U^}Ontksh$M)95(@%|eWK80SI$@5}f&h%3JDyRZ_z&Y(T;AK1~)BO_ZRuM5(NX{7!36OE#_=A)jc7ilIra>{HF;k_mf*qZPD(p_*<> zRFt)Vs;H70)cjG|mUW-iX-3?DUp0I&5r0}T+RUtJw?tio$vTB^7fdnYQ)N*S)hG)D zRZ$kOYgB&_L`7CJ!DupJwg{`CqmpWfT1<Ii%L?YH*`r-cAfNs1KfeeJMc3<_Ikj4%PV zlt>5_$!-EfpqmNMVh0hZFy&^fNLZ5Fx@ozW%9b-ssfBw=&ZK+Uu$W-3rNBSBD&A#(eZ}yeM?d$- zEepk^H$E|b_s*}|M0k7V?U#k^f{$3xzg|+WFEU`A04a#qMG7=KMr7DZvalPsok+

SKj*CQI@`-=)A?N(D*Ob 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�&8ely^$$SxVomH8rMDR`&!KvbbljIg8?L& z|M*dpSm83!9du*;z1EMt4DadPWjZ{fBBvwHcS&;ZtkimEL^z^bx!7E;R2;~jiLI3i z>jE{GskhO4trq>z4+>|sGZa=*MW3U6>KeL5CFEVCOL0MaLl;>QX6l}aPfk<38d7ty zZq;!`Mzm+Ve%4ayr73(y^=TA8U@slO^=h`*Y_H{MT4G=QjuDRdB1Q3Cnj?NPWX4|Q zvEU5>j`*WcKCbp+7`F|h$4S%AGPu-59t@fjC-P;+gTdG#ABz^;8!VDM80;|cx{Q2T z@S#D;Ps5x@z1GqF2OC5fN(KR1vPxY*7%;*k9aB(HAG|cmMqD+m>KSyz3sLvSPgTh4 z@~Xv!wCaTgoI{Im7^w!kL6@uYdWHap3M#2%7sV7(L^baG7~vn2G+|y)=j2Z6-d2TR zXffsFQ;ItXeYaVp6jdNtUKC`aoDrI;D7}&)R3=$QfxGB>g1aK^NEV_WFHt_b1P7)P z8A#rm#l5edJE{<2LKK+gVl!W{Sskuq6*YsP2{xJqAuxAod{OTB*3<4P)uQAkRGb+S zW1`x4Q9|8;g}uvy%?A+5{~J=of<|Y2Ni=BDp~rv`6J{(}u?1liCux=!WmR{3{lRcF zo;1_he6d`uH{0F*a6Fwa*Y^HRi}@$*;NGAfrzX>5`-J%SDTnL zZC8O7hbuV&zyUx0Dhb-{Of3GkTK7w+WRlRr;({2)MTl8nMr(tT3;80!lJcPG#$^N1 z)pmk8Sfg@Ws@3)@HjBYqz)h0`+-7pz-}-rd;f0(P($-Sa*zc`bx6|VLoVLwK=Y?83wVjQp6ReIzbEo7hEx@MA) z-lUN10z50{@7c_S;ak&W4W>vspO!QxUk`7QI@KKZ?&wJypRTv1=^p*9Nb_xO27{%4H?4O2I55dgsC z|M-8_0;7Qc4Zk4&yng&|M!Zo*=ycvV{K8ovY|P9g8jShfMz+q(yfEU(f@k=x(jj#< v7#Pym+%q?$Z|u7k+=Q5(p2YNzw5e|-?Q|RSrW>Z?rn;B^>8UM&ADjUN6dV@_ diff --git a/src/addons.js b/src/addons.js index 08b88c95..cb5b8002 100644 --- a/src/addons.js +++ b/src/addons.js @@ -294,6 +294,8 @@ export default class AddonManager extends Module { if ( ! addon ) throw new Error(`Unknown add-on id: ${id}`); + await this.i18n.loadChunk(`addon.${id}`); + let module = this.resolve(`addon.${id}`); if ( module ) { if ( ! module.loaded ) diff --git a/src/i18n.js b/src/i18n.js index cf3af7ff..d5ac48fe 100644 --- a/src/i18n.js +++ b/src/i18n.js @@ -6,12 +6,15 @@ import Parser from '@ffz/icu-msgparser'; -import {DEBUG} from 'utilities/constants'; +import {DEBUG, SERVER} from 'utilities/constants'; import {get, pick_random, shallow_copy, deep_copy} from 'utilities/object'; +import { getBuster } from 'utilities/time'; import Module from 'utilities/module'; import NewTransCore from 'utilities/translation-core'; +const fetchJSON = (url, options) => fetch(url, options).then(r => r.ok ? r.json() : null).catch(() => null); + const API_SERVER = 'https://api-test.frankerfacez.com'; const STACK_SPLITTER = /\s*at\s+(.+?)\s+\((.+)\)$/, @@ -78,6 +81,7 @@ export class TranslationManager extends Module { this._seen = new Set; this.availableLocales = ['en']; + this.chunks = ['client']; this.localeData = { en: { name: 'English' } @@ -350,6 +354,25 @@ export class TranslationManager extends Module { this.locale = this.settings.get('i18n.locale'); } + async loadChunk(name) { + if (this.chunks.includes(name)) + return []; + + this.chunks.push(name); + + const locale = this._.locale; + const phrases = await this.loadLocale(locale, name); + + const added = this._.extend(phrases); + if ( added.length ) { + this.log.info(`Loaded Chunk: ${name} -- Phrases: ${added.length}`); + this.emit(':loaded', added); + this.emit(':update'); + } + + return added; + } + broadcast(msg) { if ( this._broadcaster ) this._broadcaster.postMessage(msg); @@ -448,32 +471,13 @@ export class TranslationManager extends Module { this.strings_loading = true; - const loadPage = async page => { - const resp = await fetch(`${API_SERVER}/v2/i18n/strings?page=${page}`); - if ( ! resp.ok ) { - this.log.warn(`Error Loading Strings -- Status: ${resp.status}`); - return { - next: false, - strings: [] - }; - } - - const data = await resp.json(); - return { - next: data?.pages > page, - strings: data?.strings || [] - } - } - - let page = 1; - let next = true; - let strings = []; - - while(next) { - const data = await loadPage(page++); // eslint-disable-line no-await-in-loop - strings = strings.concat(data.strings); - next = data.next; - } + const resp = await fetch(`${SERVER}/script/locale/strings.json?_=${getBuster(30)}`); + let strings; + if (! resp.ok ) { + this.log.warn(`Error Loading Strings -- Status: ${resp.status}`); + strings = []; + } else + strings = await resp.json(); for(const str of strings) { const key = str.id; @@ -629,19 +633,20 @@ export class TranslationManager extends Module { async loadLocales() { - const resp = await fetch(`${API_SERVER}/v2/i18n/locales`); + const resp = await fetch(`${SERVER}/script/locale/locales.json?_=${getBuster(30)}`); + let data; if ( ! resp.ok ) { this.log.warn(`Error Populating Locales -- Status: ${resp.status}`); - throw new Error(`http error ${resp.status} loading locales`) - } + } else + data = await resp.json(); - let data = await resp.json(); if ( ! Array.isArray(data) || ! data.length ) data = [{ id: 'en', name: 'English', coverage: 100, - rtl: false + rtl: false, + hashes: {} }]; this.localeData = {}; @@ -657,11 +662,46 @@ export class TranslationManager extends Module { } - async loadLocale(locale) { + async loadLocale(locale, chunk = null) { if ( locale === 'en' ) return {}; - const resp = await fetch(`${API_SERVER}/v2/i18n/locale/${locale}`); + const hashes = this.localeData[locale]?.hashes; + if (! hashes) { + this.log.info(`Cannot Load Locale: ${locale}`); + return {}; + } + + if (! chunk) + chunk = this.chunks; + else if (! Array.isArray(chunk)) + chunk = [chunk]; + + const id = this.localeData[locale].id; + const promises = []; + + for(const chnk of chunk) { + const hash = hashes[chnk]; + if (! hash) + continue; + + promises.push(fetchJSON(`https://cdn.frankerfacez.com/static/locale/${id}/${chnk}.${hash}.json`)); + } + + const chunks = await Promise.all(promises); + const result = {}; + + for(const chunk of chunks) { + if (! chunk) + continue; + + for(const [key,val] of Object.entries(chunk)) + result[key] = val; + } + + return result; + + /*const resp = await fetch(`${API_SERVER}/v2/i18n/locale/${locale}`); if ( ! resp.ok ) { if ( resp.status === 404 ) { this.log.info(`Cannot Load Locale: ${locale}`); @@ -673,7 +713,7 @@ export class TranslationManager extends Module { } const data = await resp.json(); - return data?.phrases; + return data?.phrases;*/ } async setLocale(new_locale) { @@ -713,7 +753,7 @@ export class TranslationManager extends Module { } async loadDayjsLocale(locale) { - if ( locale === 'en' ) + if ( locale === 'en' || locale === 'en-arrr' ) return; try { diff --git a/src/modules/chat/actions/types.jsx b/src/modules/chat/actions/types.jsx index c36a17a4..4de79288 100644 --- a/src/modules/chat/actions/types.jsx +++ b/src/modules/chat/actions/types.jsx @@ -276,11 +276,11 @@ export const timeout = { editor: () => import(/* webpackChunkName: 'main-menu' */ './components/edit-timeout.vue'), title: 'Timeout User', - description: '{options.duration,number} second{options.duration,en_plural}', + description: '{options.duration, plural, one {# second} other {# seconds}}', reason_text(data) { return this.i18n.t('chat.actions.timeout-reason', - 'Timeout {user.login} for {duration,number} second{duration,en_plural} for:', + 'Timeout {user.login} for {duration, plural, one {# second} other {# seconds}} for:', { user: data.user, duration: data.options.duration @@ -291,7 +291,7 @@ export const timeout = { tooltip(data) { return this.i18n.t( 'chat.actions.timeout.tooltip', - 'Timeout {user.login} for {duration,number} second{duration,en_plural}', + 'Timeout {user.login} for {duration, plural, one {# second} other {# seconds}}', { user: data.user, duration: data.options.duration diff --git a/src/modules/chat/badges.jsx b/src/modules/chat/badges.jsx index 53397bb5..4d0c5dd2 100644 --- a/src/modules/chat/badges.jsx +++ b/src/modules/chat/badges.jsx @@ -466,18 +466,18 @@ export default class Badges extends Module { if ( d.data ) { if ( d.badge === 'subscriber' ) { if ( tier > 0 ) - title = this.i18n.t('badges.subscriber.tier-months', '{title}\n(Tier {tier}, {months,number} Month{months,en_plural})', { + title = this.i18n.t('badges.subscriber.tier-months', '{title}\n(Tier {tier}, {months, plural, one {# Month} other {# Months}})', { title, tier, months: d.data }); else - title = this.i18n.t('badges.subscriber.months', '{title}\n({count,number} Month{count,en_plural})', { + title = this.i18n.t('badges.subscriber.months', '{title}\n({count, plural, one {# Month} other {# Months}})', { title, count: d.data }); } else if ( d.badge === 'founder' ) { - title = this.i18n.t('badges.founder.months', '{title}\n(Subscribed for {count,number} Month{count,en_plural})', { + title = this.i18n.t('badges.founder.months', '{title}\n(Subscribed for {count, plural, one {# Month} other {# Months}})', { title, count: d.data }); diff --git a/src/modules/chat/rich_providers.js b/src/modules/chat/rich_providers.js index 4a5e5f9e..da1f2590 100644 --- a/src/modules/chat/rich_providers.js +++ b/src/modules/chat/rich_providers.js @@ -251,7 +251,7 @@ export const Clips = { const extra = { type: 'i18n', key: 'clip.desc.2', - phrase: 'Clipped by {curator} — {views,number} View{views,en_plural}', + phrase: 'Clipped by {curator} — {views, plural, one {# View} other {# Views}}', content: { curator, views: clip.viewCount diff --git a/src/modules/main_menu/components/profile-manager.vue b/src/modules/main_menu/components/profile-manager.vue index aa5e624b..cbf9fdc4 100644 --- a/src/modules/main_menu/components/profile-manager.vue +++ b/src/modules/main_menu/components/profile-manager.vue @@ -556,7 +556,7 @@ export default { this.resetImport(); - this.import_message = this.t('setting.backup-restore.imported', 'The profile "{name}" has been successfully imported with {count,number} setting{count,en_plural}.', { + this.import_message = this.t('setting.backup-restore.imported', 'The profile "{name}" has been successfully imported with {count, plural, one {# setting} other {# settings}}.', { name: prof.i18n_key ? this.t(prof.i18n_key, prof.title) : prof.title, count: i }); diff --git a/src/modules/main_menu/components/setting-check-box.vue b/src/modules/main_menu/components/setting-check-box.vue index e007c0b6..d8fb7bcd 100644 --- a/src/modules/main_menu/components/setting-check-box.vue +++ b/src/modules/main_menu/components/setting-check-box.vue @@ -15,7 +15,7 @@ diff --git a/src/modules/main_menu/components/setting-color-box.vue b/src/modules/main_menu/components/setting-color-box.vue index ea54e403..51886f8a 100644 --- a/src/modules/main_menu/components/setting-color-box.vue +++ b/src/modules/main_menu/components/setting-color-box.vue @@ -5,7 +5,7 @@ >

diff --git a/src/modules/main_menu/components/setting-combo-box.vue b/src/modules/main_menu/components/setting-combo-box.vue index c2473df5..c3d7eec8 100644 --- a/src/modules/main_menu/components/setting-combo-box.vue +++ b/src/modules/main_menu/components/setting-combo-box.vue @@ -5,7 +5,7 @@ >
diff --git a/src/modules/main_menu/components/setting-hotkey.vue b/src/modules/main_menu/components/setting-hotkey.vue index 0c0c067b..f7ddd2fa 100644 --- a/src/modules/main_menu/components/setting-hotkey.vue +++ b/src/modules/main_menu/components/setting-hotkey.vue @@ -5,7 +5,7 @@ >
diff --git a/src/modules/main_menu/components/setting-radio-buttons.vue b/src/modules/main_menu/components/setting-radio-buttons.vue index fb8d8829..6203a94d 100644 --- a/src/modules/main_menu/components/setting-radio-buttons.vue +++ b/src/modules/main_menu/components/setting-radio-buttons.vue @@ -1,7 +1,7 @@