scratch-l10n 6.0.75 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/editor/blocks/pt-br.json +1 -1
- package/editor/extensions/ab.json +20 -0
- package/editor/extensions/af.json +20 -0
- package/editor/extensions/am.json +20 -0
- package/editor/extensions/an.json +20 -0
- package/editor/extensions/ar.json +20 -0
- package/editor/extensions/ast.json +20 -0
- package/editor/extensions/az.json +20 -0
- package/editor/extensions/be.json +20 -0
- package/editor/extensions/bg.json +20 -0
- package/editor/extensions/bn.json +20 -0
- package/editor/extensions/ca.json +20 -0
- package/editor/extensions/ckb.json +20 -0
- package/editor/extensions/cs.json +20 -0
- package/editor/extensions/cy.json +20 -0
- package/editor/extensions/da.json +20 -0
- package/editor/extensions/de.json +20 -0
- package/editor/extensions/el.json +20 -0
- package/editor/extensions/en.json +20 -0
- package/editor/extensions/eo.json +20 -0
- package/editor/extensions/es-419.json +20 -0
- package/editor/extensions/es.json +20 -0
- package/editor/extensions/et.json +20 -0
- package/editor/extensions/eu.json +20 -0
- package/editor/extensions/fa.json +20 -0
- package/editor/extensions/fi.json +20 -0
- package/editor/extensions/fil.json +20 -0
- package/editor/extensions/fr.json +20 -0
- package/editor/extensions/fy.json +20 -0
- package/editor/extensions/ga.json +20 -0
- package/editor/extensions/gd.json +20 -0
- package/editor/extensions/gl.json +20 -0
- package/editor/extensions/ha.json +20 -0
- package/editor/extensions/he.json +20 -0
- package/editor/extensions/hi.json +20 -0
- package/editor/extensions/hr.json +20 -0
- package/editor/extensions/ht.json +20 -0
- package/editor/extensions/hu.json +20 -0
- package/editor/extensions/hy.json +20 -0
- package/editor/extensions/id.json +20 -0
- package/editor/extensions/is.json +20 -0
- package/editor/extensions/it.json +20 -0
- package/editor/extensions/ja-Hira.json +20 -0
- package/editor/extensions/ja.json +20 -0
- package/editor/extensions/ka.json +20 -0
- package/editor/extensions/kk.json +20 -0
- package/editor/extensions/km.json +20 -0
- package/editor/extensions/ko.json +20 -0
- package/editor/extensions/ku.json +20 -0
- package/editor/extensions/lt.json +20 -0
- package/editor/extensions/lv.json +20 -0
- package/editor/extensions/mi.json +20 -0
- package/editor/extensions/mn.json +20 -0
- package/editor/extensions/nb.json +20 -0
- package/editor/extensions/nl.json +20 -0
- package/editor/extensions/nn.json +20 -0
- package/editor/extensions/nso.json +20 -0
- package/editor/extensions/oc.json +20 -0
- package/editor/extensions/or.json +20 -0
- package/editor/extensions/pl.json +20 -0
- package/editor/extensions/pt-br.json +20 -0
- package/editor/extensions/pt.json +20 -0
- package/editor/extensions/qu.json +20 -0
- package/editor/extensions/rap.json +20 -0
- package/editor/extensions/ro.json +20 -0
- package/editor/extensions/ru.json +20 -0
- package/editor/extensions/sk.json +20 -0
- package/editor/extensions/sl.json +20 -0
- package/editor/extensions/sr.json +20 -0
- package/editor/extensions/sv.json +20 -0
- package/editor/extensions/sw.json +20 -0
- package/editor/extensions/th.json +20 -0
- package/editor/extensions/tn.json +20 -0
- package/editor/extensions/tr.json +20 -0
- package/editor/extensions/uk.json +20 -0
- package/editor/extensions/uz.json +20 -0
- package/editor/extensions/vi.json +20 -0
- package/editor/extensions/xh.json +20 -0
- package/editor/extensions/zh-cn.json +20 -0
- package/editor/extensions/zh-tw.json +20 -0
- package/editor/extensions/zu.json +20 -0
- package/editor/interface/ab.json +24 -12
- package/editor/interface/af.json +24 -12
- package/editor/interface/am.json +24 -12
- package/editor/interface/an.json +24 -12
- package/editor/interface/ar.json +32 -20
- package/editor/interface/ast.json +24 -12
- package/editor/interface/az.json +24 -12
- package/editor/interface/be.json +24 -12
- package/editor/interface/bg.json +24 -12
- package/editor/interface/bn.json +24 -12
- package/editor/interface/ca.json +24 -12
- package/editor/interface/ckb.json +24 -12
- package/editor/interface/cs.json +41 -29
- package/editor/interface/cy.json +24 -12
- package/editor/interface/da.json +24 -12
- package/editor/interface/de.json +24 -12
- package/editor/interface/el.json +24 -12
- package/editor/interface/en.json +24 -12
- package/editor/interface/eo.json +24 -12
- package/editor/interface/es-419.json +24 -12
- package/editor/interface/es.json +55 -43
- package/editor/interface/et.json +24 -12
- package/editor/interface/eu.json +24 -12
- package/editor/interface/fa.json +24 -12
- package/editor/interface/fi.json +56 -44
- package/editor/interface/fil.json +24 -12
- package/editor/interface/fr.json +24 -12
- package/editor/interface/fy.json +24 -12
- package/editor/interface/ga.json +24 -12
- package/editor/interface/gd.json +24 -12
- package/editor/interface/gl.json +24 -12
- package/editor/interface/ha.json +24 -12
- package/editor/interface/he.json +24 -12
- package/editor/interface/hi.json +24 -12
- package/editor/interface/hr.json +24 -12
- package/editor/interface/ht.json +24 -12
- package/editor/interface/hu.json +24 -12
- package/editor/interface/hy.json +24 -12
- package/editor/interface/id.json +24 -12
- package/editor/interface/is.json +24 -12
- package/editor/interface/it.json +24 -12
- package/editor/interface/ja-Hira.json +24 -12
- package/editor/interface/ja.json +33 -21
- package/editor/interface/ka.json +24 -12
- package/editor/interface/kk.json +24 -12
- package/editor/interface/km.json +24 -12
- package/editor/interface/ko.json +24 -12
- package/editor/interface/ku.json +24 -12
- package/editor/interface/lt.json +24 -12
- package/editor/interface/lv.json +24 -12
- package/editor/interface/mi.json +24 -12
- package/editor/interface/mn.json +24 -12
- package/editor/interface/nb.json +24 -12
- package/editor/interface/nl.json +24 -12
- package/editor/interface/nn.json +24 -12
- package/editor/interface/nso.json +24 -12
- package/editor/interface/oc.json +24 -12
- package/editor/interface/or.json +24 -12
- package/editor/interface/pl.json +24 -12
- package/editor/interface/pt-br.json +35 -23
- package/editor/interface/pt.json +24 -12
- package/editor/interface/qu.json +24 -12
- package/editor/interface/rap.json +24 -12
- package/editor/interface/ro.json +54 -42
- package/editor/interface/ru.json +24 -12
- package/editor/interface/sk.json +24 -12
- package/editor/interface/sl.json +24 -12
- package/editor/interface/sr.json +24 -12
- package/editor/interface/sv.json +24 -12
- package/editor/interface/sw.json +24 -12
- package/editor/interface/th.json +24 -12
- package/editor/interface/tn.json +24 -12
- package/editor/interface/tr.json +24 -12
- package/editor/interface/uk.json +24 -12
- package/editor/interface/uz.json +24 -12
- package/editor/interface/vi.json +24 -12
- package/editor/interface/xh.json +24 -12
- package/editor/interface/zh-cn.json +24 -12
- package/editor/interface/zh-tw.json +54 -42
- package/editor/interface/zu.json +24 -12
- package/locales/blocks-msgs.js +1 -1
- package/locales/editor-msgs.js +3688 -1128
- package/locales/extensions-msgs.js +1600 -0
- package/locales/interface-msgs.js +2088 -1128
- package/package.json +1 -1
- package/scripts/lib/pull-and-validate.mts +142 -0
- package/scripts/lib/validate.mts +44 -17
- package/scripts/tx-pull-editor.mts +13 -35
- package/scripts/tx-pull-www.mts +23 -60
- package/scripts/validate-translations.mts +4 -5
- package/scripts/validate-www.mts +4 -5
- package/www/scratch-website.about-l10njson/ab.json +6 -32
- package/www/scratch-website.about-l10njson/af.json +6 -32
- package/www/scratch-website.about-l10njson/am.json +6 -32
- package/www/scratch-website.about-l10njson/an.json +6 -32
- package/www/scratch-website.about-l10njson/ar.json +6 -32
- package/www/scratch-website.about-l10njson/ast.json +6 -32
- package/www/scratch-website.about-l10njson/az.json +6 -32
- package/www/scratch-website.about-l10njson/be.json +6 -32
- package/www/scratch-website.about-l10njson/bg.json +6 -32
- package/www/scratch-website.about-l10njson/bn.json +6 -32
- package/www/scratch-website.about-l10njson/ca.json +6 -32
- package/www/scratch-website.about-l10njson/ckb.json +6 -32
- package/www/scratch-website.about-l10njson/cs.json +6 -32
- package/www/scratch-website.about-l10njson/cy.json +6 -32
- package/www/scratch-website.about-l10njson/da.json +6 -32
- package/www/scratch-website.about-l10njson/de.json +6 -32
- package/www/scratch-website.about-l10njson/el.json +6 -32
- package/www/scratch-website.about-l10njson/en.json +6 -32
- package/www/scratch-website.about-l10njson/eo.json +6 -32
- package/www/scratch-website.about-l10njson/es-419.json +6 -32
- package/www/scratch-website.about-l10njson/es.json +6 -32
- package/www/scratch-website.about-l10njson/et.json +6 -32
- package/www/scratch-website.about-l10njson/eu.json +6 -32
- package/www/scratch-website.about-l10njson/fa.json +6 -32
- package/www/scratch-website.about-l10njson/fi.json +7 -33
- package/www/scratch-website.about-l10njson/fil.json +6 -32
- package/www/scratch-website.about-l10njson/fr.json +6 -32
- package/www/scratch-website.about-l10njson/fy.json +6 -32
- package/www/scratch-website.about-l10njson/ga.json +6 -32
- package/www/scratch-website.about-l10njson/gd.json +6 -32
- package/www/scratch-website.about-l10njson/gl.json +6 -32
- package/www/scratch-website.about-l10njson/ha.json +6 -32
- package/www/scratch-website.about-l10njson/he.json +6 -32
- package/www/scratch-website.about-l10njson/hi.json +6 -32
- package/www/scratch-website.about-l10njson/hr.json +6 -32
- package/www/scratch-website.about-l10njson/ht.json +6 -32
- package/www/scratch-website.about-l10njson/hu.json +6 -32
- package/www/scratch-website.about-l10njson/hy.json +6 -32
- package/www/scratch-website.about-l10njson/id.json +6 -32
- package/www/scratch-website.about-l10njson/is.json +6 -32
- package/www/scratch-website.about-l10njson/it.json +6 -32
- package/www/scratch-website.about-l10njson/ja-Hira.json +6 -32
- package/www/scratch-website.about-l10njson/ja.json +6 -32
- package/www/scratch-website.about-l10njson/ka.json +6 -32
- package/www/scratch-website.about-l10njson/kk.json +6 -32
- package/www/scratch-website.about-l10njson/km.json +6 -32
- package/www/scratch-website.about-l10njson/ko.json +6 -32
- package/www/scratch-website.about-l10njson/ku.json +6 -32
- package/www/scratch-website.about-l10njson/lt.json +6 -32
- package/www/scratch-website.about-l10njson/lv.json +6 -32
- package/www/scratch-website.about-l10njson/mi.json +6 -32
- package/www/scratch-website.about-l10njson/mn.json +6 -32
- package/www/scratch-website.about-l10njson/nb.json +6 -32
- package/www/scratch-website.about-l10njson/nl.json +6 -32
- package/www/scratch-website.about-l10njson/nn.json +7 -33
- package/www/scratch-website.about-l10njson/nso.json +6 -32
- package/www/scratch-website.about-l10njson/oc.json +6 -32
- package/www/scratch-website.about-l10njson/or.json +6 -32
- package/www/scratch-website.about-l10njson/pl.json +6 -32
- package/www/scratch-website.about-l10njson/pt-br.json +6 -32
- package/www/scratch-website.about-l10njson/pt.json +6 -32
- package/www/scratch-website.about-l10njson/qu.json +6 -32
- package/www/scratch-website.about-l10njson/rap.json +6 -32
- package/www/scratch-website.about-l10njson/ro.json +6 -32
- package/www/scratch-website.about-l10njson/ru.json +6 -32
- package/www/scratch-website.about-l10njson/sk.json +6 -32
- package/www/scratch-website.about-l10njson/sl.json +6 -32
- package/www/scratch-website.about-l10njson/sr.json +6 -32
- package/www/scratch-website.about-l10njson/sv.json +6 -32
- package/www/scratch-website.about-l10njson/sw.json +6 -32
- package/www/scratch-website.about-l10njson/th.json +6 -32
- package/www/scratch-website.about-l10njson/tn.json +6 -32
- package/www/scratch-website.about-l10njson/tr.json +6 -32
- package/www/scratch-website.about-l10njson/uk.json +6 -32
- package/www/scratch-website.about-l10njson/uz.json +6 -32
- package/www/scratch-website.about-l10njson/vi.json +7 -33
- package/www/scratch-website.about-l10njson/xh.json +6 -32
- package/www/scratch-website.about-l10njson/zh-cn.json +6 -32
- package/www/scratch-website.about-l10njson/zh-tw.json +6 -32
- package/www/scratch-website.about-l10njson/zu.json +6 -32
- package/www/scratch-website.annual-report-2019-l10njson/fi.json +1 -1
- package/www/scratch-website.annual-report-2019-l10njson/lt.json +2 -2
- package/www/scratch-website.annual-report-2019-l10njson/mi.json +1 -1
- package/www/scratch-website.annual-report-2019-l10njson/vi.json +3 -3
- package/www/scratch-website.annual-report-2020-l10njson/lt.json +1 -1
- package/www/scratch-website.annual-report-2020-l10njson/mi.json +1 -1
- package/www/scratch-website.annual-report-2020-l10njson/vi.json +3 -3
- package/www/scratch-website.annual-report-2021-l10njson/fi.json +1 -1
- package/www/scratch-website.annual-report-2021-l10njson/hi.json +163 -163
- package/www/scratch-website.annual-report-2021-l10njson/lt.json +2 -2
- package/www/scratch-website.annual-report-2021-l10njson/mi.json +1 -1
- package/www/scratch-website.annual-report-2021-l10njson/vi.json +114 -114
- package/www/scratch-website.become-a-scratcher-l10njson/es.json +9 -9
- package/www/scratch-website.become-a-scratcher-l10njson/he.json +6 -6
- package/www/scratch-website.become-a-scratcher-l10njson/pt-br.json +2 -2
- package/www/scratch-website.contact-us-l10njson/ab.json +3 -4
- package/www/scratch-website.contact-us-l10njson/af.json +3 -4
- package/www/scratch-website.contact-us-l10njson/am.json +3 -4
- package/www/scratch-website.contact-us-l10njson/an.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ar.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ast.json +3 -4
- package/www/scratch-website.contact-us-l10njson/az.json +3 -4
- package/www/scratch-website.contact-us-l10njson/be.json +3 -4
- package/www/scratch-website.contact-us-l10njson/bg.json +3 -4
- package/www/scratch-website.contact-us-l10njson/bn.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ca.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ckb.json +3 -4
- package/www/scratch-website.contact-us-l10njson/cs.json +2 -3
- package/www/scratch-website.contact-us-l10njson/cy.json +3 -4
- package/www/scratch-website.contact-us-l10njson/da.json +3 -4
- package/www/scratch-website.contact-us-l10njson/de.json +3 -4
- package/www/scratch-website.contact-us-l10njson/el.json +3 -4
- package/www/scratch-website.contact-us-l10njson/en.json +3 -4
- package/www/scratch-website.contact-us-l10njson/eo.json +3 -4
- package/www/scratch-website.contact-us-l10njson/es-419.json +3 -4
- package/www/scratch-website.contact-us-l10njson/es.json +3 -4
- package/www/scratch-website.contact-us-l10njson/et.json +3 -4
- package/www/scratch-website.contact-us-l10njson/eu.json +3 -4
- package/www/scratch-website.contact-us-l10njson/fa.json +3 -4
- package/www/scratch-website.contact-us-l10njson/fi.json +3 -4
- package/www/scratch-website.contact-us-l10njson/fil.json +3 -4
- package/www/scratch-website.contact-us-l10njson/fr.json +3 -4
- package/www/scratch-website.contact-us-l10njson/fy.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ga.json +3 -4
- package/www/scratch-website.contact-us-l10njson/gd.json +3 -4
- package/www/scratch-website.contact-us-l10njson/gl.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ha.json +3 -4
- package/www/scratch-website.contact-us-l10njson/he.json +3 -4
- package/www/scratch-website.contact-us-l10njson/hi.json +3 -4
- package/www/scratch-website.contact-us-l10njson/hr.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ht.json +3 -4
- package/www/scratch-website.contact-us-l10njson/hu.json +3 -4
- package/www/scratch-website.contact-us-l10njson/hy.json +3 -4
- package/www/scratch-website.contact-us-l10njson/id.json +3 -4
- package/www/scratch-website.contact-us-l10njson/is.json +3 -4
- package/www/scratch-website.contact-us-l10njson/it.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ja-Hira.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ja.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ka.json +3 -4
- package/www/scratch-website.contact-us-l10njson/kk.json +3 -4
- package/www/scratch-website.contact-us-l10njson/km.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ko.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ku.json +3 -4
- package/www/scratch-website.contact-us-l10njson/lt.json +3 -4
- package/www/scratch-website.contact-us-l10njson/lv.json +3 -4
- package/www/scratch-website.contact-us-l10njson/mi.json +3 -4
- package/www/scratch-website.contact-us-l10njson/mn.json +3 -4
- package/www/scratch-website.contact-us-l10njson/nb.json +3 -4
- package/www/scratch-website.contact-us-l10njson/nl.json +3 -4
- package/www/scratch-website.contact-us-l10njson/nn.json +3 -4
- package/www/scratch-website.contact-us-l10njson/nso.json +3 -4
- package/www/scratch-website.contact-us-l10njson/oc.json +3 -4
- package/www/scratch-website.contact-us-l10njson/or.json +3 -4
- package/www/scratch-website.contact-us-l10njson/pl.json +3 -4
- package/www/scratch-website.contact-us-l10njson/pt-br.json +3 -4
- package/www/scratch-website.contact-us-l10njson/pt.json +3 -4
- package/www/scratch-website.contact-us-l10njson/qu.json +3 -4
- package/www/scratch-website.contact-us-l10njson/rap.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ro.json +3 -4
- package/www/scratch-website.contact-us-l10njson/ru.json +3 -4
- package/www/scratch-website.contact-us-l10njson/sk.json +3 -4
- package/www/scratch-website.contact-us-l10njson/sl.json +3 -4
- package/www/scratch-website.contact-us-l10njson/sr.json +3 -4
- package/www/scratch-website.contact-us-l10njson/sv.json +3 -4
- package/www/scratch-website.contact-us-l10njson/sw.json +3 -4
- package/www/scratch-website.contact-us-l10njson/th.json +3 -4
- package/www/scratch-website.contact-us-l10njson/tn.json +3 -4
- package/www/scratch-website.contact-us-l10njson/tr.json +3 -4
- package/www/scratch-website.contact-us-l10njson/uk.json +3 -4
- package/www/scratch-website.contact-us-l10njson/uz.json +3 -4
- package/www/scratch-website.contact-us-l10njson/vi.json +10 -11
- package/www/scratch-website.contact-us-l10njson/xh.json +3 -4
- package/www/scratch-website.contact-us-l10njson/zh-cn.json +3 -4
- package/www/scratch-website.contact-us-l10njson/zh-tw.json +3 -4
- package/www/scratch-website.contact-us-l10njson/zu.json +3 -4
- package/www/scratch-website.cookies-l10njson/hi.json +9 -9
- package/www/scratch-website.cookies-l10njson/ja-Hira.json +2 -2
- package/www/scratch-website.credits-l10njson/fi.json +10 -10
- package/www/scratch-website.credits-l10njson/he.json +1 -1
- package/www/scratch-website.credits-l10njson/mi.json +1 -1
- package/www/scratch-website.credits-l10njson/vi.json +1 -1
- package/www/scratch-website.dmca-l10njson/cs.json +3 -3
- package/www/scratch-website.dmca-l10njson/es-419.json +3 -3
- package/www/scratch-website.dmca-l10njson/es.json +3 -3
- package/www/scratch-website.dmca-l10njson/fi.json +3 -3
- package/www/scratch-website.dmca-l10njson/ja-Hira.json +3 -3
- package/www/scratch-website.dmca-l10njson/ja.json +4 -4
- package/www/scratch-website.dmca-l10njson/pt-br.json +2 -2
- package/www/scratch-website.dmca-l10njson/pt.json +2 -2
- package/www/scratch-website.dmca-l10njson/sk.json +3 -3
- package/www/scratch-website.download-l10njson/vi.json +1 -1
- package/www/scratch-website.download-scratch-link-l10njson/fi.json +8 -8
- package/www/scratch-website.download-scratch2-l10njson/vi.json +1 -1
- package/www/scratch-website.educator-landing-l10njson/vi.json +1 -1
- package/www/scratch-website.ev3-l10njson/sk.json +3 -3
- package/www/scratch-website.faq-l10njson/ab.json +3 -12
- package/www/scratch-website.faq-l10njson/af.json +3 -12
- package/www/scratch-website.faq-l10njson/am.json +3 -12
- package/www/scratch-website.faq-l10njson/an.json +3 -12
- package/www/scratch-website.faq-l10njson/ar.json +3 -12
- package/www/scratch-website.faq-l10njson/ast.json +3 -12
- package/www/scratch-website.faq-l10njson/az.json +3 -12
- package/www/scratch-website.faq-l10njson/be.json +3 -12
- package/www/scratch-website.faq-l10njson/bg.json +3 -12
- package/www/scratch-website.faq-l10njson/bn.json +3 -12
- package/www/scratch-website.faq-l10njson/ca.json +3 -12
- package/www/scratch-website.faq-l10njson/ckb.json +3 -12
- package/www/scratch-website.faq-l10njson/cs.json +3 -12
- package/www/scratch-website.faq-l10njson/cy.json +3 -12
- package/www/scratch-website.faq-l10njson/da.json +3 -12
- package/www/scratch-website.faq-l10njson/de.json +3 -12
- package/www/scratch-website.faq-l10njson/el.json +3 -12
- package/www/scratch-website.faq-l10njson/en.json +3 -12
- package/www/scratch-website.faq-l10njson/eo.json +3 -12
- package/www/scratch-website.faq-l10njson/es-419.json +3 -12
- package/www/scratch-website.faq-l10njson/es.json +3 -12
- package/www/scratch-website.faq-l10njson/et.json +3 -12
- package/www/scratch-website.faq-l10njson/eu.json +3 -12
- package/www/scratch-website.faq-l10njson/fa.json +3 -12
- package/www/scratch-website.faq-l10njson/fi.json +3 -12
- package/www/scratch-website.faq-l10njson/fil.json +3 -12
- package/www/scratch-website.faq-l10njson/fr.json +3 -12
- package/www/scratch-website.faq-l10njson/fy.json +3 -12
- package/www/scratch-website.faq-l10njson/ga.json +3 -12
- package/www/scratch-website.faq-l10njson/gd.json +3 -12
- package/www/scratch-website.faq-l10njson/gl.json +3 -12
- package/www/scratch-website.faq-l10njson/ha.json +3 -12
- package/www/scratch-website.faq-l10njson/he.json +3 -12
- package/www/scratch-website.faq-l10njson/hi.json +3 -12
- package/www/scratch-website.faq-l10njson/hr.json +3 -12
- package/www/scratch-website.faq-l10njson/ht.json +3 -12
- package/www/scratch-website.faq-l10njson/hu.json +3 -12
- package/www/scratch-website.faq-l10njson/hy.json +3 -12
- package/www/scratch-website.faq-l10njson/id.json +3 -12
- package/www/scratch-website.faq-l10njson/is.json +3 -12
- package/www/scratch-website.faq-l10njson/it.json +3 -12
- package/www/scratch-website.faq-l10njson/ja-Hira.json +3 -12
- package/www/scratch-website.faq-l10njson/ja.json +3 -12
- package/www/scratch-website.faq-l10njson/ka.json +3 -12
- package/www/scratch-website.faq-l10njson/kk.json +3 -12
- package/www/scratch-website.faq-l10njson/km.json +3 -12
- package/www/scratch-website.faq-l10njson/ko.json +3 -12
- package/www/scratch-website.faq-l10njson/ku.json +3 -12
- package/www/scratch-website.faq-l10njson/lt.json +7 -16
- package/www/scratch-website.faq-l10njson/lv.json +3 -12
- package/www/scratch-website.faq-l10njson/mi.json +3 -12
- package/www/scratch-website.faq-l10njson/mn.json +3 -12
- package/www/scratch-website.faq-l10njson/nb.json +3 -12
- package/www/scratch-website.faq-l10njson/nl.json +3 -12
- package/www/scratch-website.faq-l10njson/nn.json +3 -12
- package/www/scratch-website.faq-l10njson/nso.json +3 -12
- package/www/scratch-website.faq-l10njson/oc.json +3 -12
- package/www/scratch-website.faq-l10njson/or.json +3 -12
- package/www/scratch-website.faq-l10njson/pl.json +3 -12
- package/www/scratch-website.faq-l10njson/pt-br.json +6 -15
- package/www/scratch-website.faq-l10njson/pt.json +3 -12
- package/www/scratch-website.faq-l10njson/qu.json +3 -12
- package/www/scratch-website.faq-l10njson/rap.json +3 -12
- package/www/scratch-website.faq-l10njson/ro.json +3 -12
- package/www/scratch-website.faq-l10njson/ru.json +3 -12
- package/www/scratch-website.faq-l10njson/sk.json +3 -12
- package/www/scratch-website.faq-l10njson/sl.json +3 -12
- package/www/scratch-website.faq-l10njson/sr.json +3 -12
- package/www/scratch-website.faq-l10njson/sv.json +3 -12
- package/www/scratch-website.faq-l10njson/sw.json +3 -12
- package/www/scratch-website.faq-l10njson/th.json +3 -12
- package/www/scratch-website.faq-l10njson/tn.json +3 -12
- package/www/scratch-website.faq-l10njson/tr.json +3 -12
- package/www/scratch-website.faq-l10njson/uk.json +3 -12
- package/www/scratch-website.faq-l10njson/uz.json +3 -12
- package/www/scratch-website.faq-l10njson/vi.json +7 -16
- package/www/scratch-website.faq-l10njson/xh.json +3 -12
- package/www/scratch-website.faq-l10njson/zh-cn.json +3 -12
- package/www/scratch-website.faq-l10njson/zh-tw.json +3 -12
- package/www/scratch-website.faq-l10njson/zu.json +3 -12
- package/www/scratch-website.general-l10njson/ab.json +7 -9
- package/www/scratch-website.general-l10njson/af.json +7 -9
- package/www/scratch-website.general-l10njson/am.json +7 -9
- package/www/scratch-website.general-l10njson/an.json +7 -9
- package/www/scratch-website.general-l10njson/ar.json +7 -9
- package/www/scratch-website.general-l10njson/ast.json +7 -9
- package/www/scratch-website.general-l10njson/az.json +7 -9
- package/www/scratch-website.general-l10njson/be.json +7 -9
- package/www/scratch-website.general-l10njson/bg.json +7 -9
- package/www/scratch-website.general-l10njson/bn.json +7 -9
- package/www/scratch-website.general-l10njson/ca.json +7 -9
- package/www/scratch-website.general-l10njson/ckb.json +7 -9
- package/www/scratch-website.general-l10njson/cs.json +26 -28
- package/www/scratch-website.general-l10njson/cy.json +7 -9
- package/www/scratch-website.general-l10njson/da.json +7 -9
- package/www/scratch-website.general-l10njson/de.json +7 -9
- package/www/scratch-website.general-l10njson/el.json +7 -9
- package/www/scratch-website.general-l10njson/en.json +7 -9
- package/www/scratch-website.general-l10njson/eo.json +7 -9
- package/www/scratch-website.general-l10njson/es-419.json +32 -34
- package/www/scratch-website.general-l10njson/es.json +38 -40
- package/www/scratch-website.general-l10njson/et.json +7 -9
- package/www/scratch-website.general-l10njson/eu.json +7 -9
- package/www/scratch-website.general-l10njson/fa.json +7 -9
- package/www/scratch-website.general-l10njson/fi.json +43 -45
- package/www/scratch-website.general-l10njson/fil.json +7 -9
- package/www/scratch-website.general-l10njson/fr.json +6 -8
- package/www/scratch-website.general-l10njson/fy.json +7 -9
- package/www/scratch-website.general-l10njson/ga.json +7 -9
- package/www/scratch-website.general-l10njson/gd.json +7 -9
- package/www/scratch-website.general-l10njson/gl.json +7 -9
- package/www/scratch-website.general-l10njson/ha.json +7 -9
- package/www/scratch-website.general-l10njson/he.json +8 -10
- package/www/scratch-website.general-l10njson/hi.json +7 -9
- package/www/scratch-website.general-l10njson/hr.json +7 -9
- package/www/scratch-website.general-l10njson/ht.json +7 -9
- package/www/scratch-website.general-l10njson/hu.json +7 -9
- package/www/scratch-website.general-l10njson/hy.json +7 -9
- package/www/scratch-website.general-l10njson/id.json +7 -9
- package/www/scratch-website.general-l10njson/is.json +7 -9
- package/www/scratch-website.general-l10njson/it.json +7 -9
- package/www/scratch-website.general-l10njson/ja-Hira.json +23 -25
- package/www/scratch-website.general-l10njson/ja.json +23 -25
- package/www/scratch-website.general-l10njson/ka.json +7 -9
- package/www/scratch-website.general-l10njson/kk.json +7 -9
- package/www/scratch-website.general-l10njson/km.json +7 -9
- package/www/scratch-website.general-l10njson/ko.json +39 -41
- package/www/scratch-website.general-l10njson/ku.json +7 -9
- package/www/scratch-website.general-l10njson/lt.json +7 -9
- package/www/scratch-website.general-l10njson/lv.json +7 -9
- package/www/scratch-website.general-l10njson/mi.json +30 -32
- package/www/scratch-website.general-l10njson/mn.json +7 -9
- package/www/scratch-website.general-l10njson/nb.json +7 -9
- package/www/scratch-website.general-l10njson/nl.json +7 -9
- package/www/scratch-website.general-l10njson/nn.json +7 -9
- package/www/scratch-website.general-l10njson/nso.json +7 -9
- package/www/scratch-website.general-l10njson/oc.json +7 -9
- package/www/scratch-website.general-l10njson/or.json +7 -9
- package/www/scratch-website.general-l10njson/pl.json +6 -8
- package/www/scratch-website.general-l10njson/pt-br.json +26 -28
- package/www/scratch-website.general-l10njson/pt.json +9 -11
- package/www/scratch-website.general-l10njson/qu.json +7 -9
- package/www/scratch-website.general-l10njson/rap.json +7 -9
- package/www/scratch-website.general-l10njson/ro.json +7 -9
- package/www/scratch-website.general-l10njson/ru.json +7 -9
- package/www/scratch-website.general-l10njson/sk.json +7 -9
- package/www/scratch-website.general-l10njson/sl.json +7 -9
- package/www/scratch-website.general-l10njson/sr.json +7 -9
- package/www/scratch-website.general-l10njson/sv.json +7 -9
- package/www/scratch-website.general-l10njson/sw.json +7 -9
- package/www/scratch-website.general-l10njson/th.json +7 -9
- package/www/scratch-website.general-l10njson/tn.json +7 -9
- package/www/scratch-website.general-l10njson/tr.json +7 -9
- package/www/scratch-website.general-l10njson/uk.json +7 -9
- package/www/scratch-website.general-l10njson/uz.json +7 -9
- package/www/scratch-website.general-l10njson/vi.json +21 -23
- package/www/scratch-website.general-l10njson/xh.json +7 -9
- package/www/scratch-website.general-l10njson/zh-cn.json +7 -9
- package/www/scratch-website.general-l10njson/zh-tw.json +7 -9
- package/www/scratch-website.general-l10njson/zu.json +7 -9
- package/www/scratch-website.guidelines-l10njson/cs.json +23 -23
- package/www/scratch-website.guidelines-l10njson/es-419.json +23 -23
- package/www/scratch-website.guidelines-l10njson/es.json +24 -24
- package/www/scratch-website.guidelines-l10njson/fi.json +23 -23
- package/www/scratch-website.ideas-l10njson/cs.json +31 -31
- package/www/scratch-website.ideas-l10njson/fi.json +1 -1
- package/www/scratch-website.ideas-l10njson/vi.json +6 -6
- package/www/scratch-website.messages-l10njson/cs.json +2 -2
- package/www/scratch-website.messages-l10njson/es-419.json +2 -2
- package/www/scratch-website.messages-l10njson/es.json +2 -2
- package/www/scratch-website.messages-l10njson/he.json +4 -4
- package/www/scratch-website.messages-l10njson/it.json +1 -1
- package/www/scratch-website.messages-l10njson/ja.json +2 -2
- package/www/scratch-website.messages-l10njson/pt-br.json +1 -1
- package/www/scratch-website.messages-l10njson/vi.json +2 -2
- package/www/scratch-website.parents-l10njson/es-419.json +1 -1
- package/www/scratch-website.parents-l10njson/es.json +1 -1
- package/www/scratch-website.parents-l10njson/vi.json +3 -3
- package/www/scratch-website.preview-l10njson/ab.json +16 -2
- package/www/scratch-website.preview-l10njson/af.json +16 -2
- package/www/scratch-website.preview-l10njson/am.json +16 -2
- package/www/scratch-website.preview-l10njson/an.json +16 -2
- package/www/scratch-website.preview-l10njson/ar.json +16 -2
- package/www/scratch-website.preview-l10njson/ast.json +16 -2
- package/www/scratch-website.preview-l10njson/az.json +16 -2
- package/www/scratch-website.preview-l10njson/be.json +16 -2
- package/www/scratch-website.preview-l10njson/bg.json +16 -2
- package/www/scratch-website.preview-l10njson/bn.json +16 -2
- package/www/scratch-website.preview-l10njson/ca.json +16 -2
- package/www/scratch-website.preview-l10njson/ckb.json +16 -2
- package/www/scratch-website.preview-l10njson/cs.json +29 -15
- package/www/scratch-website.preview-l10njson/cy.json +16 -2
- package/www/scratch-website.preview-l10njson/da.json +16 -2
- package/www/scratch-website.preview-l10njson/de.json +16 -2
- package/www/scratch-website.preview-l10njson/el.json +16 -2
- package/www/scratch-website.preview-l10njson/en.json +16 -2
- package/www/scratch-website.preview-l10njson/eo.json +16 -2
- package/www/scratch-website.preview-l10njson/es-419.json +18 -4
- package/www/scratch-website.preview-l10njson/es.json +18 -4
- package/www/scratch-website.preview-l10njson/et.json +16 -2
- package/www/scratch-website.preview-l10njson/eu.json +16 -2
- package/www/scratch-website.preview-l10njson/fa.json +21 -7
- package/www/scratch-website.preview-l10njson/fi.json +17 -3
- package/www/scratch-website.preview-l10njson/fil.json +16 -2
- package/www/scratch-website.preview-l10njson/fr.json +16 -2
- package/www/scratch-website.preview-l10njson/fy.json +16 -2
- package/www/scratch-website.preview-l10njson/ga.json +16 -2
- package/www/scratch-website.preview-l10njson/gd.json +16 -2
- package/www/scratch-website.preview-l10njson/gl.json +16 -2
- package/www/scratch-website.preview-l10njson/ha.json +16 -2
- package/www/scratch-website.preview-l10njson/he.json +31 -17
- package/www/scratch-website.preview-l10njson/hi.json +16 -2
- package/www/scratch-website.preview-l10njson/hr.json +16 -2
- package/www/scratch-website.preview-l10njson/ht.json +16 -2
- package/www/scratch-website.preview-l10njson/hu.json +16 -2
- package/www/scratch-website.preview-l10njson/hy.json +16 -2
- package/www/scratch-website.preview-l10njson/id.json +16 -2
- package/www/scratch-website.preview-l10njson/is.json +16 -2
- package/www/scratch-website.preview-l10njson/it.json +16 -2
- package/www/scratch-website.preview-l10njson/ja-Hira.json +16 -2
- package/www/scratch-website.preview-l10njson/ja.json +16 -2
- package/www/scratch-website.preview-l10njson/ka.json +16 -2
- package/www/scratch-website.preview-l10njson/kk.json +16 -2
- package/www/scratch-website.preview-l10njson/km.json +16 -2
- package/www/scratch-website.preview-l10njson/ko.json +16 -2
- package/www/scratch-website.preview-l10njson/ku.json +16 -2
- package/www/scratch-website.preview-l10njson/lt.json +16 -2
- package/www/scratch-website.preview-l10njson/lv.json +16 -2
- package/www/scratch-website.preview-l10njson/mi.json +16 -2
- package/www/scratch-website.preview-l10njson/mn.json +16 -2
- package/www/scratch-website.preview-l10njson/nb.json +16 -2
- package/www/scratch-website.preview-l10njson/nl.json +16 -2
- package/www/scratch-website.preview-l10njson/nn.json +16 -2
- package/www/scratch-website.preview-l10njson/nso.json +16 -2
- package/www/scratch-website.preview-l10njson/oc.json +16 -2
- package/www/scratch-website.preview-l10njson/or.json +16 -2
- package/www/scratch-website.preview-l10njson/pl.json +16 -2
- package/www/scratch-website.preview-l10njson/pt-br.json +19 -5
- package/www/scratch-website.preview-l10njson/pt.json +16 -2
- package/www/scratch-website.preview-l10njson/qu.json +16 -2
- package/www/scratch-website.preview-l10njson/rap.json +16 -2
- package/www/scratch-website.preview-l10njson/ro.json +16 -2
- package/www/scratch-website.preview-l10njson/ru.json +16 -2
- package/www/scratch-website.preview-l10njson/sk.json +16 -2
- package/www/scratch-website.preview-l10njson/sl.json +16 -2
- package/www/scratch-website.preview-l10njson/sr.json +16 -2
- package/www/scratch-website.preview-l10njson/sv.json +16 -2
- package/www/scratch-website.preview-l10njson/sw.json +16 -2
- package/www/scratch-website.preview-l10njson/th.json +16 -2
- package/www/scratch-website.preview-l10njson/tn.json +16 -2
- package/www/scratch-website.preview-l10njson/tr.json +16 -2
- package/www/scratch-website.preview-l10njson/uk.json +16 -2
- package/www/scratch-website.preview-l10njson/uz.json +16 -2
- package/www/scratch-website.preview-l10njson/vi.json +18 -4
- package/www/scratch-website.preview-l10njson/xh.json +16 -2
- package/www/scratch-website.preview-l10njson/zh-cn.json +16 -2
- package/www/scratch-website.preview-l10njson/zh-tw.json +16 -2
- package/www/scratch-website.preview-l10njson/zu.json +16 -2
- package/www/scratch-website.privacypolicy-apps-l10njson/hi.json +25 -25
- package/www/scratch-website.privacypolicy-apps-l10njson/vi.json +1 -1
- package/www/scratch-website.privacypolicy-l10njson/hi.json +3 -3
- package/www/scratch-website.privacypolicy-l10njson/pt-br.json +26 -26
- package/www/scratch-website.privacypolicy-l10njson/vi.json +1 -1
- package/www/scratch-website.sec-l10njson/lt.json +10 -10
- package/www/scratch-website.splash-l10njson/ab.json +0 -1
- package/www/scratch-website.splash-l10njson/af.json +0 -1
- package/www/scratch-website.splash-l10njson/am.json +0 -1
- package/www/scratch-website.splash-l10njson/an.json +0 -1
- package/www/scratch-website.splash-l10njson/ar.json +0 -1
- package/www/scratch-website.splash-l10njson/ast.json +0 -1
- package/www/scratch-website.splash-l10njson/az.json +0 -1
- package/www/scratch-website.splash-l10njson/be.json +2 -3
- package/www/scratch-website.splash-l10njson/bg.json +0 -1
- package/www/scratch-website.splash-l10njson/bn.json +0 -1
- package/www/scratch-website.splash-l10njson/ca.json +0 -1
- package/www/scratch-website.splash-l10njson/ckb.json +0 -1
- package/www/scratch-website.splash-l10njson/cs.json +1 -2
- package/www/scratch-website.splash-l10njson/cy.json +0 -1
- package/www/scratch-website.splash-l10njson/da.json +0 -1
- package/www/scratch-website.splash-l10njson/de.json +0 -1
- package/www/scratch-website.splash-l10njson/el.json +0 -1
- package/www/scratch-website.splash-l10njson/en.json +0 -1
- package/www/scratch-website.splash-l10njson/eo.json +0 -1
- package/www/scratch-website.splash-l10njson/es-419.json +1 -2
- package/www/scratch-website.splash-l10njson/es.json +1 -2
- package/www/scratch-website.splash-l10njson/et.json +0 -1
- package/www/scratch-website.splash-l10njson/eu.json +0 -1
- package/www/scratch-website.splash-l10njson/fa.json +0 -1
- package/www/scratch-website.splash-l10njson/fi.json +2 -3
- package/www/scratch-website.splash-l10njson/fil.json +0 -1
- package/www/scratch-website.splash-l10njson/fr.json +0 -1
- package/www/scratch-website.splash-l10njson/fy.json +0 -1
- package/www/scratch-website.splash-l10njson/ga.json +0 -1
- package/www/scratch-website.splash-l10njson/gd.json +0 -1
- package/www/scratch-website.splash-l10njson/gl.json +0 -1
- package/www/scratch-website.splash-l10njson/ha.json +0 -1
- package/www/scratch-website.splash-l10njson/he.json +1 -2
- package/www/scratch-website.splash-l10njson/hi.json +0 -1
- package/www/scratch-website.splash-l10njson/hr.json +0 -1
- package/www/scratch-website.splash-l10njson/ht.json +0 -1
- package/www/scratch-website.splash-l10njson/hu.json +0 -1
- package/www/scratch-website.splash-l10njson/hy.json +0 -1
- package/www/scratch-website.splash-l10njson/id.json +0 -1
- package/www/scratch-website.splash-l10njson/is.json +0 -1
- package/www/scratch-website.splash-l10njson/it.json +1 -2
- package/www/scratch-website.splash-l10njson/ja-Hira.json +0 -1
- package/www/scratch-website.splash-l10njson/ja.json +0 -1
- package/www/scratch-website.splash-l10njson/ka.json +0 -1
- package/www/scratch-website.splash-l10njson/kk.json +0 -1
- package/www/scratch-website.splash-l10njson/km.json +0 -1
- package/www/scratch-website.splash-l10njson/ko.json +0 -1
- package/www/scratch-website.splash-l10njson/ku.json +0 -1
- package/www/scratch-website.splash-l10njson/lt.json +0 -1
- package/www/scratch-website.splash-l10njson/lv.json +0 -1
- package/www/scratch-website.splash-l10njson/mi.json +2 -3
- package/www/scratch-website.splash-l10njson/mn.json +0 -1
- package/www/scratch-website.splash-l10njson/nb.json +0 -1
- package/www/scratch-website.splash-l10njson/nl.json +0 -1
- package/www/scratch-website.splash-l10njson/nn.json +0 -1
- package/www/scratch-website.splash-l10njson/nso.json +0 -1
- package/www/scratch-website.splash-l10njson/oc.json +0 -1
- package/www/scratch-website.splash-l10njson/or.json +0 -1
- package/www/scratch-website.splash-l10njson/pl.json +0 -1
- package/www/scratch-website.splash-l10njson/pt-br.json +1 -2
- package/www/scratch-website.splash-l10njson/pt.json +0 -1
- package/www/scratch-website.splash-l10njson/qu.json +0 -1
- package/www/scratch-website.splash-l10njson/rap.json +0 -1
- package/www/scratch-website.splash-l10njson/ro.json +0 -1
- package/www/scratch-website.splash-l10njson/ru.json +0 -1
- package/www/scratch-website.splash-l10njson/sk.json +0 -1
- package/www/scratch-website.splash-l10njson/sl.json +0 -1
- package/www/scratch-website.splash-l10njson/sr.json +0 -1
- package/www/scratch-website.splash-l10njson/sv.json +0 -1
- package/www/scratch-website.splash-l10njson/sw.json +0 -1
- package/www/scratch-website.splash-l10njson/th.json +0 -1
- package/www/scratch-website.splash-l10njson/tn.json +0 -1
- package/www/scratch-website.splash-l10njson/tr.json +0 -1
- package/www/scratch-website.splash-l10njson/uk.json +0 -1
- package/www/scratch-website.splash-l10njson/uz.json +0 -1
- package/www/scratch-website.splash-l10njson/vi.json +6 -7
- package/www/scratch-website.splash-l10njson/xh.json +0 -1
- package/www/scratch-website.splash-l10njson/zh-cn.json +0 -1
- package/www/scratch-website.splash-l10njson/zh-tw.json +0 -1
- package/www/scratch-website.splash-l10njson/zu.json +0 -1
- package/www/scratch-website.starter-projects-l10njson/cs.json +7 -7
- package/www/scratch-website.starter-projects-l10njson/es-419.json +7 -7
- package/www/scratch-website.starter-projects-l10njson/es.json +7 -7
- package/www/scratch-website.starter-projects-l10njson/fi.json +6 -6
- package/www/scratch-website.starter-projects-l10njson/ru.json +2 -2
- package/www/scratch-website.starter-projects-l10njson/vi.json +4 -4
- package/www/scratch-website.studio-l10njson/ab.json +1 -0
- package/www/scratch-website.studio-l10njson/af.json +1 -0
- package/www/scratch-website.studio-l10njson/am.json +1 -0
- package/www/scratch-website.studio-l10njson/an.json +1 -0
- package/www/scratch-website.studio-l10njson/ar.json +1 -0
- package/www/scratch-website.studio-l10njson/ast.json +1 -0
- package/www/scratch-website.studio-l10njson/az.json +1 -0
- package/www/scratch-website.studio-l10njson/be.json +1 -0
- package/www/scratch-website.studio-l10njson/bg.json +1 -0
- package/www/scratch-website.studio-l10njson/bn.json +1 -0
- package/www/scratch-website.studio-l10njson/ca.json +1 -0
- package/www/scratch-website.studio-l10njson/ckb.json +1 -0
- package/www/scratch-website.studio-l10njson/cs.json +59 -58
- package/www/scratch-website.studio-l10njson/cy.json +1 -0
- package/www/scratch-website.studio-l10njson/da.json +1 -0
- package/www/scratch-website.studio-l10njson/de.json +1 -0
- package/www/scratch-website.studio-l10njson/el.json +1 -0
- package/www/scratch-website.studio-l10njson/en.json +1 -0
- package/www/scratch-website.studio-l10njson/eo.json +1 -0
- package/www/scratch-website.studio-l10njson/es-419.json +1 -0
- package/www/scratch-website.studio-l10njson/es.json +1 -0
- package/www/scratch-website.studio-l10njson/et.json +1 -0
- package/www/scratch-website.studio-l10njson/eu.json +1 -0
- package/www/scratch-website.studio-l10njson/fa.json +1 -0
- package/www/scratch-website.studio-l10njson/fi.json +3 -2
- package/www/scratch-website.studio-l10njson/fil.json +1 -0
- package/www/scratch-website.studio-l10njson/fr.json +1 -0
- package/www/scratch-website.studio-l10njson/fy.json +1 -0
- package/www/scratch-website.studio-l10njson/ga.json +1 -0
- package/www/scratch-website.studio-l10njson/gd.json +1 -0
- package/www/scratch-website.studio-l10njson/gl.json +1 -0
- package/www/scratch-website.studio-l10njson/ha.json +1 -0
- package/www/scratch-website.studio-l10njson/he.json +1 -0
- package/www/scratch-website.studio-l10njson/hi.json +1 -0
- package/www/scratch-website.studio-l10njson/hr.json +1 -0
- package/www/scratch-website.studio-l10njson/ht.json +1 -0
- package/www/scratch-website.studio-l10njson/hu.json +1 -0
- package/www/scratch-website.studio-l10njson/hy.json +1 -0
- package/www/scratch-website.studio-l10njson/id.json +1 -0
- package/www/scratch-website.studio-l10njson/is.json +1 -0
- package/www/scratch-website.studio-l10njson/it.json +1 -0
- package/www/scratch-website.studio-l10njson/ja-Hira.json +1 -0
- package/www/scratch-website.studio-l10njson/ja.json +1 -0
- package/www/scratch-website.studio-l10njson/ka.json +1 -0
- package/www/scratch-website.studio-l10njson/kk.json +1 -0
- package/www/scratch-website.studio-l10njson/km.json +1 -0
- package/www/scratch-website.studio-l10njson/ko.json +1 -0
- package/www/scratch-website.studio-l10njson/ku.json +1 -0
- package/www/scratch-website.studio-l10njson/lt.json +1 -0
- package/www/scratch-website.studio-l10njson/lv.json +1 -0
- package/www/scratch-website.studio-l10njson/mi.json +1 -0
- package/www/scratch-website.studio-l10njson/mn.json +1 -0
- package/www/scratch-website.studio-l10njson/nb.json +1 -0
- package/www/scratch-website.studio-l10njson/nl.json +1 -0
- package/www/scratch-website.studio-l10njson/nn.json +1 -0
- package/www/scratch-website.studio-l10njson/nso.json +1 -0
- package/www/scratch-website.studio-l10njson/oc.json +1 -0
- package/www/scratch-website.studio-l10njson/or.json +1 -0
- package/www/scratch-website.studio-l10njson/pl.json +1 -0
- package/www/scratch-website.studio-l10njson/pt-br.json +1 -0
- package/www/scratch-website.studio-l10njson/pt.json +1 -0
- package/www/scratch-website.studio-l10njson/qu.json +1 -0
- package/www/scratch-website.studio-l10njson/rap.json +1 -0
- package/www/scratch-website.studio-l10njson/ro.json +1 -0
- package/www/scratch-website.studio-l10njson/ru.json +1 -0
- package/www/scratch-website.studio-l10njson/sk.json +1 -0
- package/www/scratch-website.studio-l10njson/sl.json +1 -0
- package/www/scratch-website.studio-l10njson/sr.json +1 -0
- package/www/scratch-website.studio-l10njson/sv.json +1 -0
- package/www/scratch-website.studio-l10njson/sw.json +1 -0
- package/www/scratch-website.studio-l10njson/th.json +1 -0
- package/www/scratch-website.studio-l10njson/tn.json +1 -0
- package/www/scratch-website.studio-l10njson/tr.json +1 -0
- package/www/scratch-website.studio-l10njson/uk.json +1 -0
- package/www/scratch-website.studio-l10njson/uz.json +1 -0
- package/www/scratch-website.studio-l10njson/vi.json +7 -6
- package/www/scratch-website.studio-l10njson/xh.json +1 -0
- package/www/scratch-website.studio-l10njson/zh-cn.json +1 -0
- package/www/scratch-website.studio-l10njson/zh-tw.json +1 -0
- package/www/scratch-website.studio-l10njson/zu.json +1 -0
- package/www/scratch-website.teacher-faq-l10njson/cy.json +1 -1
- package/www/scratch-website.teacher-faq-l10njson/it.json +2 -2
- package/www/scratch-website.teacher-faq-l10njson/pt-br.json +11 -11
- package/www/scratch-website.teacherregistration-l10njson/cs.json +16 -16
- package/www/scratch-website.teacherregistration-l10njson/es-419.json +11 -11
- package/www/scratch-website.teacherregistration-l10njson/es.json +11 -11
- package/www/scratch-website.teacherregistration-l10njson/ru.json +1 -1
- package/www/scratch-website.wedo2-legacy-l10njson/zh-tw.json +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import locales, { localeMap } from '../../src/supported-locales.mjs'
|
|
2
|
+
import { poolMap } from './concurrent.mts'
|
|
3
|
+
import { ProgressLogger } from './progress-logger.mts'
|
|
4
|
+
import { TransifexStringsKeyValueJson } from './transifex-formats.mts'
|
|
5
|
+
import { txPull, txResources } from './transifex.mts'
|
|
6
|
+
import { filterInvalidTranslations, TransifexEditorString } from './validate.mts'
|
|
7
|
+
|
|
8
|
+
const CONCURRENCY_LIMIT = 36
|
|
9
|
+
const SOURCE_LOCALE = 'en' // TODO: don't hardcode this
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param resources - A list of Transifex resource names
|
|
13
|
+
* @param selectedLocales - A list of Scratch locale codes
|
|
14
|
+
* @returns The list of all resource/locale combinations to pull. The source locale is always excluded.
|
|
15
|
+
*/
|
|
16
|
+
const expandResourceFiles = (resources: string[], selectedLocales: string[]) => {
|
|
17
|
+
const files = []
|
|
18
|
+
for (const resource of resources) {
|
|
19
|
+
for (const locale of selectedLocales) {
|
|
20
|
+
if (locale === SOURCE_LOCALE) {
|
|
21
|
+
continue
|
|
22
|
+
}
|
|
23
|
+
files.push({ resource: resource, locale: locale })
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return files
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Pull and validate a single Transifex "file" (resource + locale).
|
|
31
|
+
* @param o - The options for pulling and validating a single file.
|
|
32
|
+
* @param o.allStrings - All pulled strings so far, used to get source strings for validation
|
|
33
|
+
* @param o.project - The Transifex project to pull from
|
|
34
|
+
* @param o.resource - The Transifex resource to pull from
|
|
35
|
+
* @param o.locale - The locale to pull
|
|
36
|
+
* @param o.mode - The mode to use when pulling (e.g., "reviewed")
|
|
37
|
+
* @returns A list of messages about errors encountered during validation, if any.
|
|
38
|
+
*/
|
|
39
|
+
async function pullAndValidateFile({
|
|
40
|
+
allStrings,
|
|
41
|
+
project,
|
|
42
|
+
resource,
|
|
43
|
+
locale,
|
|
44
|
+
mode,
|
|
45
|
+
}: {
|
|
46
|
+
allStrings: Record<string, Record<string, TransifexStringsKeyValueJson>>
|
|
47
|
+
project: string
|
|
48
|
+
resource: string
|
|
49
|
+
locale: string
|
|
50
|
+
mode?: string
|
|
51
|
+
}) {
|
|
52
|
+
const messages: string[] = []
|
|
53
|
+
const txLocale = localeMap[locale] || locale
|
|
54
|
+
const fileContent = await txPull<TransifexEditorString>(project, resource, txLocale, mode)
|
|
55
|
+
|
|
56
|
+
// if fileContent has message & description, we only want the message
|
|
57
|
+
const translations: TransifexStringsKeyValueJson = {}
|
|
58
|
+
for (const key of Object.keys(fileContent)) {
|
|
59
|
+
const tx = fileContent[key]
|
|
60
|
+
if (typeof tx === 'string') {
|
|
61
|
+
translations[key] = tx
|
|
62
|
+
} else {
|
|
63
|
+
translations[key] = tx.message
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (!(resource in allStrings)) {
|
|
68
|
+
allStrings[resource] = {}
|
|
69
|
+
}
|
|
70
|
+
allStrings[resource][locale] = translations
|
|
71
|
+
|
|
72
|
+
// may or may not be the same as `translations`
|
|
73
|
+
const sourceStrings = allStrings[resource][SOURCE_LOCALE]
|
|
74
|
+
|
|
75
|
+
// some of the validation checks may still be relevant even if locale === SOURCE_LOCALE
|
|
76
|
+
// console.log({ resource, locale, translations, sourceStrings })
|
|
77
|
+
messages.push(...filterInvalidTranslations(locale, translations, sourceStrings))
|
|
78
|
+
|
|
79
|
+
return messages
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Pull one or more resource(s) from a transifex project and validate the strings.
|
|
84
|
+
* Return any error messages from the validation process along with all valid strings.
|
|
85
|
+
* @param o - The options for pulling, validating, and saving translations.
|
|
86
|
+
* @param o.project - The Transifex project to pull translations from.
|
|
87
|
+
* @param o.mode - The mode to use when pulling translations (e.g., "reviewed").
|
|
88
|
+
* @param o.resources - The resources within the project to pull translations for.
|
|
89
|
+
* @param o.selectedLocales - The locales to pull translations for. Defaults to all supported locales.
|
|
90
|
+
* @returns Translation strings and a list of messages about errors encountered during validation, if any.
|
|
91
|
+
*/
|
|
92
|
+
export async function pullAndValidateProject({
|
|
93
|
+
project,
|
|
94
|
+
resources,
|
|
95
|
+
mode,
|
|
96
|
+
selectedLocales,
|
|
97
|
+
}: {
|
|
98
|
+
project: string
|
|
99
|
+
mode?: string
|
|
100
|
+
resources?: string[]
|
|
101
|
+
selectedLocales?: string | string[]
|
|
102
|
+
}) {
|
|
103
|
+
const selectedResources = resources ?? (await txResources(project))
|
|
104
|
+
selectedLocales =
|
|
105
|
+
typeof selectedLocales === 'string' ? [selectedLocales] : (selectedLocales ?? Object.keys(locales))
|
|
106
|
+
|
|
107
|
+
const files = expandResourceFiles(selectedResources, selectedLocales)
|
|
108
|
+
|
|
109
|
+
const allStrings: Record<string, Record<string, TransifexStringsKeyValueJson>> = {}
|
|
110
|
+
const messages: string[] = []
|
|
111
|
+
|
|
112
|
+
const progress = new ProgressLogger(selectedResources.length + files.length)
|
|
113
|
+
|
|
114
|
+
const handleFile = async (resource: string, locale: string) => {
|
|
115
|
+
try {
|
|
116
|
+
const fileMessages = await pullAndValidateFile({
|
|
117
|
+
allStrings,
|
|
118
|
+
project,
|
|
119
|
+
resource,
|
|
120
|
+
locale,
|
|
121
|
+
mode,
|
|
122
|
+
})
|
|
123
|
+
for (const message of fileMessages) {
|
|
124
|
+
// `message` already contains locale and/or string info if appropriate
|
|
125
|
+
messages.push(`resource ${resource} / ${message}`)
|
|
126
|
+
}
|
|
127
|
+
} finally {
|
|
128
|
+
progress.increment()
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Ensure source locale is available for validation
|
|
133
|
+
await poolMap(selectedResources, CONCURRENCY_LIMIT, async resource => handleFile(resource, SOURCE_LOCALE))
|
|
134
|
+
|
|
135
|
+
// Non-source locales
|
|
136
|
+
await poolMap(files, CONCURRENCY_LIMIT, async ({ resource, locale }) => handleFile(resource, locale))
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
allStrings,
|
|
140
|
+
messages,
|
|
141
|
+
}
|
|
142
|
+
}
|
package/scripts/lib/validate.mts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import assert from 'assert'
|
|
2
1
|
import parse from 'format-message-parse'
|
|
3
2
|
import {
|
|
4
3
|
TransifexStringChrome,
|
|
@@ -84,24 +83,52 @@ export const validMessage = (message: TransifexEditorString, source: TransifexEd
|
|
|
84
83
|
}
|
|
85
84
|
|
|
86
85
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* @param
|
|
86
|
+
* Validate and filter translations.
|
|
87
|
+
* WARNING: Modifies the translations object in place by replacing invalid translations with source strings.
|
|
88
|
+
* @param locale - the Transifex locale, for error reporting
|
|
89
|
+
* @param translations - the translations to validate and filter
|
|
90
90
|
* @param source - the source strings for the translations
|
|
91
|
+
* @returns a list of messages about errors encountered during validation. Every removed translation will have a
|
|
92
|
+
* message. Some messages may not correspond to removed translations (e.g., when the number of keys differ).
|
|
91
93
|
*/
|
|
92
|
-
export const
|
|
93
|
-
|
|
94
|
+
export const filterInvalidTranslations = (
|
|
95
|
+
locale: string,
|
|
96
|
+
translations: TransifexEditorStrings,
|
|
94
97
|
source: TransifexEditorStrings,
|
|
95
|
-
) => {
|
|
96
|
-
const
|
|
98
|
+
): string[] => {
|
|
99
|
+
const messages: string[] = []
|
|
100
|
+
|
|
97
101
|
const sourceKeys = Object.keys(source)
|
|
98
|
-
|
|
99
|
-
transKeys
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
)
|
|
102
|
+
|
|
103
|
+
const transKeys = Object.keys(translations).filter(item => {
|
|
104
|
+
if (!sourceKeys.includes(item)) {
|
|
105
|
+
messages.push(`locale ${locale} has key ${item} not in the source`)
|
|
106
|
+
delete translations[item]
|
|
107
|
+
return false
|
|
108
|
+
}
|
|
109
|
+
return true
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
sourceKeys.forEach(item => {
|
|
113
|
+
if (!transKeys.includes(item)) {
|
|
114
|
+
messages.push(`locale ${locale} is missing key ${item}`)
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
transKeys.forEach(item => {
|
|
119
|
+
if (!validMessage(translations[item], source[item])) {
|
|
120
|
+
messages.push(
|
|
121
|
+
[
|
|
122
|
+
`locale ${locale} / item ${item}: message validation failed:`,
|
|
123
|
+
` msg: ${getMessageText(translations[item])}`,
|
|
124
|
+
` src: ${getMessageText(source[item])}`,
|
|
125
|
+
].join('\n'),
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
// fall back to source message
|
|
129
|
+
translations[item] = source[item]
|
|
130
|
+
}
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
return messages
|
|
107
134
|
}
|
|
@@ -8,11 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import fs from 'fs'
|
|
10
10
|
import path from 'path'
|
|
11
|
-
import
|
|
12
|
-
import { poolMap } from './lib/concurrent.mts'
|
|
13
|
-
import { TransifexStringsKeyValueJson } from './lib/transifex-formats.mts'
|
|
14
|
-
import { txPull } from './lib/transifex.mts'
|
|
15
|
-
import { TransifexEditorStrings, validateTranslations } from './lib/validate.mts'
|
|
11
|
+
import { pullAndValidateProject } from './lib/pull-and-validate.mts'
|
|
16
12
|
|
|
17
13
|
const args = process.argv.slice(2)
|
|
18
14
|
|
|
@@ -37,38 +33,20 @@ const PROJECT = args[0]
|
|
|
37
33
|
const RESOURCE = args[1]
|
|
38
34
|
const OUTPUT_DIR = path.resolve(args[2])
|
|
39
35
|
const MODE = 'reviewed'
|
|
40
|
-
const CONCURRENCY_LIMIT = 36
|
|
41
36
|
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
translations: data,
|
|
48
|
-
}
|
|
49
|
-
}
|
|
37
|
+
const validationResults = await pullAndValidateProject({
|
|
38
|
+
project: PROJECT,
|
|
39
|
+
resources: [RESOURCE],
|
|
40
|
+
mode: MODE,
|
|
41
|
+
})
|
|
50
42
|
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
throw new Error('Could not find source strings')
|
|
43
|
+
for (const resource of Object.values(validationResults.allStrings)) {
|
|
44
|
+
for (const [locale, strings] of Object.entries(resource)) {
|
|
45
|
+
const file = JSON.stringify(strings, null, 4)
|
|
46
|
+
fs.writeFileSync(`${OUTPUT_DIR}/${locale}.json`, file)
|
|
56
47
|
}
|
|
57
|
-
values.forEach(translation => {
|
|
58
|
-
validateTranslations({ locale: translation.locale, translations: translation.translations }, source)
|
|
59
|
-
// if translation has message & description, we only want the message
|
|
60
|
-
const txs: TransifexStringsKeyValueJson = {}
|
|
61
|
-
for (const key of Object.keys(translation.translations)) {
|
|
62
|
-
const tx = translation.translations[key]
|
|
63
|
-
if (typeof tx === 'string') {
|
|
64
|
-
txs[key] = tx
|
|
65
|
-
} else {
|
|
66
|
-
txs[key] = tx.message
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const file = JSON.stringify(txs, null, 4)
|
|
70
|
-
fs.writeFileSync(`${OUTPUT_DIR}/${translation.locale}.json`, file)
|
|
71
|
-
})
|
|
72
48
|
}
|
|
73
49
|
|
|
74
|
-
|
|
50
|
+
if (validationResults.messages.length > 0) {
|
|
51
|
+
console.error(validationResults.messages.join('\n\n'))
|
|
52
|
+
}
|
package/scripts/tx-pull-www.mts
CHANGED
|
@@ -9,10 +9,7 @@
|
|
|
9
9
|
import fs from 'fs/promises'
|
|
10
10
|
import { mkdirp } from 'mkdirp'
|
|
11
11
|
import path from 'path'
|
|
12
|
-
import
|
|
13
|
-
import { poolMap } from './lib/concurrent.mts'
|
|
14
|
-
import { ProgressLogger } from './lib/progress-logger.mjs'
|
|
15
|
-
import { txPull, txResources } from './lib/transifex.mts'
|
|
12
|
+
import { pullAndValidateProject } from './lib/pull-and-validate.mts'
|
|
16
13
|
|
|
17
14
|
const args = process.argv.slice(2)
|
|
18
15
|
|
|
@@ -37,68 +34,34 @@ if (!process.env.TX_TOKEN || args.length < 1) {
|
|
|
37
34
|
const PROJECT = 'scratch-website'
|
|
38
35
|
const OUTPUT_DIR = path.resolve(args[0])
|
|
39
36
|
// const MODE = {mode: 'reviewed'}; // default is everything for www
|
|
40
|
-
const CONCURRENCY_LIMIT = 36
|
|
41
37
|
|
|
42
|
-
const lang = args.length === 2 ? args[1] :
|
|
38
|
+
const lang = args.length === 2 ? args[1] : undefined
|
|
39
|
+
const validationResults = await pullAndValidateProject({
|
|
40
|
+
project: PROJECT,
|
|
41
|
+
selectedLocales: lang,
|
|
42
|
+
})
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
const locale
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
for (const [resourceName, resource] of Object.entries(validationResults.allStrings)) {
|
|
45
|
+
for (const [locale, translations] of Object.entries(resource)) {
|
|
46
|
+
const txOutdir = `${OUTPUT_DIR}/${PROJECT}.${resourceName}`
|
|
47
|
+
const fileName = `${txOutdir}/${locale}.json`
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
resource,
|
|
60
|
-
locale,
|
|
61
|
-
fileName,
|
|
62
|
-
}
|
|
63
|
-
} catch (e) {
|
|
64
|
-
;(e as Error).cause = {
|
|
65
|
-
resource,
|
|
66
|
-
locale,
|
|
67
|
-
translations,
|
|
68
|
-
txOutdir,
|
|
69
|
-
fileName,
|
|
70
|
-
}
|
|
71
|
-
throw e
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const expandResourceFiles = (resources: string[]) => {
|
|
76
|
-
const items = []
|
|
77
|
-
for (const resource of resources) {
|
|
78
|
-
if (lang) {
|
|
79
|
-
items.push({ resource: resource, locale: lang })
|
|
80
|
-
} else {
|
|
81
|
-
for (const locale of Object.keys(locales)) {
|
|
82
|
-
items.push({ resource: resource, locale: locale })
|
|
49
|
+
try {
|
|
50
|
+
mkdirp.sync(txOutdir)
|
|
51
|
+
await fs.writeFile(fileName, JSON.stringify(translations, null, 4))
|
|
52
|
+
} catch (e) {
|
|
53
|
+
;(e as Error).cause = {
|
|
54
|
+
resourceName,
|
|
55
|
+
locale,
|
|
56
|
+
translations,
|
|
57
|
+
txOutdir,
|
|
58
|
+
fileName,
|
|
83
59
|
}
|
|
60
|
+
throw e
|
|
84
61
|
}
|
|
85
62
|
}
|
|
86
|
-
return items
|
|
87
63
|
}
|
|
88
64
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const allFiles = expandResourceFiles(resources)
|
|
92
|
-
|
|
93
|
-
const progress = new ProgressLogger(allFiles.length)
|
|
94
|
-
|
|
95
|
-
await poolMap(allFiles, CONCURRENCY_LIMIT, async item => {
|
|
96
|
-
try {
|
|
97
|
-
await getLocaleData(item)
|
|
98
|
-
} finally {
|
|
99
|
-
progress.increment()
|
|
100
|
-
}
|
|
101
|
-
})
|
|
65
|
+
if (validationResults.messages.length > 0) {
|
|
66
|
+
console.error(validationResults.messages.join('\n\n'))
|
|
102
67
|
}
|
|
103
|
-
|
|
104
|
-
await pullTranslations()
|
|
@@ -7,7 +7,7 @@ import async from 'async'
|
|
|
7
7
|
import fs from 'fs'
|
|
8
8
|
import path from 'path'
|
|
9
9
|
import locales from '../src/supported-locales.mjs'
|
|
10
|
-
import {
|
|
10
|
+
import { filterInvalidTranslations, TransifexEditorStrings } from './lib/validate.mts'
|
|
11
11
|
|
|
12
12
|
const args = process.argv.slice(2)
|
|
13
13
|
const usage = `
|
|
@@ -31,11 +31,10 @@ const validate = (locale: string, callback: async.ErrorCallback) => {
|
|
|
31
31
|
if (err) callback(err)
|
|
32
32
|
// let this throw an error if invalid json
|
|
33
33
|
const strings = JSON.parse(data) as TransifexEditorStrings
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
const messages = filterInvalidTranslations(locale, strings, source)
|
|
35
|
+
if (messages.length > 0) {
|
|
36
|
+
callback(new Error(`Locale ${locale} has validation errors:\n${messages.join('\n')}`))
|
|
37
37
|
}
|
|
38
|
-
validateTranslations(translations, source)
|
|
39
38
|
})
|
|
40
39
|
}
|
|
41
40
|
|
package/scripts/validate-www.mts
CHANGED
|
@@ -9,7 +9,7 @@ import glob from 'glob'
|
|
|
9
9
|
import path from 'path'
|
|
10
10
|
import locales from '../src/supported-locales.mjs'
|
|
11
11
|
import { TransifexStringsKeyValueJson, TransifexStrings } from './lib/transifex-formats.mts'
|
|
12
|
-
import {
|
|
12
|
+
import { filterInvalidTranslations } from './lib/validate.mts'
|
|
13
13
|
|
|
14
14
|
const args = process.argv.slice(2)
|
|
15
15
|
const usage = `
|
|
@@ -37,11 +37,10 @@ const validate = (localeData: LocaleData, callback: async.ErrorCallback) => {
|
|
|
37
37
|
if (err) callback(err)
|
|
38
38
|
// let this throw an error if invalid json
|
|
39
39
|
const strings = JSON.parse(data) as TransifexStringsKeyValueJson
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const messages = filterInvalidTranslations(localeData.locale, strings, localeData.sourceData)
|
|
41
|
+
if (messages.length > 0) {
|
|
42
|
+
callback(new Error(`Locale ${localeData.locale} has validation errors:\n${messages.join('\n')}`))
|
|
43
43
|
}
|
|
44
|
-
validateTranslations(translations, localeData.sourceData)
|
|
45
44
|
})
|
|
46
45
|
}
|
|
47
46
|
|
|
@@ -5,37 +5,11 @@
|
|
|
5
5
|
"about.foundationText": "Scratch Афонд",
|
|
6
6
|
"about.introParents": "Аҭаацәа рзы аинформациа",
|
|
7
7
|
"about.introEducators": "Арҵаҩцәа рзы аинформациа",
|
|
8
|
-
"about.
|
|
9
|
-
"about.
|
|
10
|
-
"about.
|
|
11
|
-
"about.
|
|
12
|
-
"about.
|
|
13
|
-
"about.
|
|
14
|
-
"about.quotesDescription": " Scratch акоманда иаиуеит ирацәаны асалам шәҟқәа аҿари, аҭаацәеи, арҵаҩцәеи рҟынтәи. Ишәҭахума еилышәкаарц ауаа ирыҩуа? Ашәҟқәеи, дара ирнуи аилкааразы шәхы иашәырхә азхьарԥш {quotesLink}.",
|
|
15
|
-
"about.quotesLinkText": "ацитатақәа",
|
|
16
|
-
"about.learnMore": "Scratch иазкны иҵегьы",
|
|
17
|
-
"about.learnMoreFaq": "Лассы-лассы изызҵаауа",
|
|
18
|
-
"about.learnMoreParents": "Аҭаацәа рзы аинформациа",
|
|
19
|
-
"about.learnMoreEducators": "Information for Educators",
|
|
20
|
-
"about.learnMoreAnnualReport": "Есышықәсатәи аҳасабырба",
|
|
21
|
-
"about.literacy": "Ишәҵала акод аиқәыршәашьа, еиқәшәыршәала акод, аҵара азы",
|
|
22
|
-
"about.literacyImageDescription": "An image of Mitch Resnick giving a TED talk titled \"Let's Teach Kids to Code.\" A play button is in the center of the image.",
|
|
23
|
-
"about.literacyDescription": "In this <a>TED talk</a>, Scratch founder Mitch Resnick describes why the ability to code computer programs is an important part of literacy in today’s society. When people learn to code in Scratch, they learn important strategies for solving problems, designing projects, and communicating ideas.",
|
|
24
|
-
"about.schools": "Scratch ашколқәа рҿы",
|
|
25
|
-
"about.schoolsDescription": "Students are learning with Scratch at all levels (from elementary school to college) and across disciplines (such as math, computer science, language arts, social studies). Educator resources are available on the {scratchForEducatorsLink} page.",
|
|
26
|
-
"about.scratchForEducatorsLinkText": "Scratch For Educators",
|
|
27
|
-
"about.scratchedLinkText": "ScratchEd асаит",
|
|
28
|
-
"about.research": "Аҭҵаарақәа",
|
|
29
|
-
"about.researchDescription": "The {lifelongKindergartenGroupLink} and collaborators are {researchLink} how young people create, collaborate, and learn with Scratch. For an overview, see the article {codingAtACrossroadsLink} and the book {lifelongKindergartenBookLink}. To find out more about the use of Scratch, see the {statisticsLink} page and the Scratch {annualReportLink}.",
|
|
30
|
-
"about.researchLinkText": "researching",
|
|
31
|
-
"about.statisticsLinkText": "астатистика",
|
|
32
|
-
"about.lifelongKindergartenGroupLinkText": "Lifelong Kindergarten агәыԥ",
|
|
33
|
-
"about.codingAtACrossroadsLinkText": "Coding at a Crossroads",
|
|
34
|
-
"about.lifelongKindergartenBookLinkText": "Lifelong Kindergarten",
|
|
35
|
-
"about.annualReportLinkText": "Есышықәсатәи аҳасабырба",
|
|
36
|
-
"about.support": "Адгылареи ԥарала ацхыраареи",
|
|
37
|
-
"about.supportDescription": "Scratch is available for free, thanks to support from our {donorsLink}. This support helps us provide kids around the world with opportunities to imagine, create, and share. You can support Scratch by making a donation {donateLink}.",
|
|
38
|
-
"about.donorsLinkText": "адонорцәа",
|
|
39
|
-
"about.donateLinkText": "абра",
|
|
8
|
+
"about.introLearnMore": "Learn more at Scratch Foundation",
|
|
9
|
+
"about.support": "Support Scratch",
|
|
10
|
+
"about.supportDescription1": "Scratch is available for free, thanks to our {supportersLink}. This support helps us provide young people around the world with opportunities to imagine, create, and share.",
|
|
11
|
+
"about.supportDescription2": "Every dollar donated gives one child access to free, playful, and powerful creative learning through the Scratch community.",
|
|
12
|
+
"about.supportDescription3": "Join us in helping kids everywhere create what they imagine.",
|
|
13
|
+
"about.supportersLinkText": "supporters",
|
|
40
14
|
"about.donateButton": "Ацхыраара аҟаҵара"
|
|
41
15
|
}
|
|
@@ -5,37 +5,11 @@
|
|
|
5
5
|
"about.foundationText": "Scratch Stigting",
|
|
6
6
|
"about.introParents": "Inligting vir ouers",
|
|
7
7
|
"about.introEducators": "Inligting vir opvoeders",
|
|
8
|
-
"about.
|
|
9
|
-
"about.
|
|
10
|
-
"about.
|
|
11
|
-
"about.
|
|
12
|
-
"about.
|
|
13
|
-
"about.
|
|
14
|
-
"about.quotesDescription": "The Scratch Team has received many emails from youth, parents, and educators expressing thanks for Scratch. Want to see what people are saying? You can read a collection of the {quotesLink} we've received.",
|
|
15
|
-
"about.quotesLinkText": "aanhalings",
|
|
16
|
-
"about.learnMore": "Meer inligting oor Scratch",
|
|
17
|
-
"about.learnMoreFaq": "Gereelde vrae",
|
|
18
|
-
"about.learnMoreParents": "Inligting vir ouers",
|
|
19
|
-
"about.learnMoreEducators": "Inligting vir Opvoeders",
|
|
20
|
-
"about.learnMoreAnnualReport": "Jaarverslag",
|
|
21
|
-
"about.literacy": "Leer om te Programmeer, Programmeer om te Leer",
|
|
22
|
-
"about.literacyImageDescription": "An image of Mitch Resnick giving a TED talk titled \"Let's Teach Kids to Code.\" A play button is in the center of the image.",
|
|
23
|
-
"about.literacyDescription": "In this <a>TED talk</a>, Scratch founder Mitch Resnick describes why the ability to code computer programs is an important part of literacy in today’s society. When people learn to code in Scratch, they learn important strategies for solving problems, designing projects, and communicating ideas.",
|
|
24
|
-
"about.schools": "Scratch in skole",
|
|
25
|
-
"about.schoolsDescription": "Students are learning with Scratch at all levels (from elementary school to college) and across disciplines (such as math, computer science, language arts, social studies). Educator resources are available on the {scratchForEducatorsLink} page.",
|
|
26
|
-
"about.scratchForEducatorsLinkText": "Scratch vir Opvoeders",
|
|
27
|
-
"about.scratchedLinkText": "ScratchEd webwerf",
|
|
28
|
-
"about.research": "Navorsing",
|
|
29
|
-
"about.researchDescription": "The {lifelongKindergartenGroupLink} and collaborators are {researchLink} how young people create, collaborate, and learn with Scratch. For an overview, see the article {codingAtACrossroadsLink} and the book {lifelongKindergartenBookLink}. To find out more about the use of Scratch, see the {statisticsLink} page and the Scratch {annualReportLink}.",
|
|
30
|
-
"about.researchLinkText": "navorsing",
|
|
31
|
-
"about.statisticsLinkText": "Statistieke",
|
|
32
|
-
"about.lifelongKindergartenGroupLinkText": "Lewenslange Kleuterskoolgroep",
|
|
33
|
-
"about.codingAtACrossroadsLinkText": "Programmering by 'n Kruispad",
|
|
34
|
-
"about.lifelongKindergartenBookLinkText": "Lewenslange Kleuterskool",
|
|
35
|
-
"about.annualReportLinkText": "Jaarverslag",
|
|
36
|
-
"about.support": "Ondersteuning en Befondsing",
|
|
37
|
-
"about.supportDescription": "Scratch is gratis beskikbaar danksy steun van ons {donorsLink}. Hierdie ondersteuning help ons om aan kinders regoor die wêreld die geleentheid te bied om te verbeel, skep en deel. U kan Sckratch ondersteun deur 'n skenking te maak {donateLink}.",
|
|
38
|
-
"about.donorsLinkText": "skenkers",
|
|
39
|
-
"about.donateLinkText": "hier",
|
|
8
|
+
"about.introLearnMore": "Learn more at Scratch Foundation",
|
|
9
|
+
"about.support": "Support Scratch",
|
|
10
|
+
"about.supportDescription1": "Scratch is available for free, thanks to our {supportersLink}. This support helps us provide young people around the world with opportunities to imagine, create, and share.",
|
|
11
|
+
"about.supportDescription2": "Every dollar donated gives one child access to free, playful, and powerful creative learning through the Scratch community.",
|
|
12
|
+
"about.supportDescription3": "Join us in helping kids everywhere create what they imagine.",
|
|
13
|
+
"about.supportersLinkText": "supporters",
|
|
40
14
|
"about.donateButton": "Skenk"
|
|
41
15
|
}
|
|
@@ -5,37 +5,11 @@
|
|
|
5
5
|
"about.foundationText": "Scratch Foundation",
|
|
6
6
|
"about.introParents": "መረጃ ለወላጆች ",
|
|
7
7
|
"about.introEducators": "መረጃ ለአስተማሪዎች",
|
|
8
|
-
"about.
|
|
9
|
-
"about.
|
|
10
|
-
"about.
|
|
11
|
-
"about.
|
|
12
|
-
"about.
|
|
13
|
-
"about.
|
|
14
|
-
"about.quotesDescription": "የስክራች ቡድን ብዙ የምስጋና ኢሜሎችን ከታዳጊዎች፣ ከወላጆችና ከአስተማሪዎች ተቀብሏል። የሰዎቹን መልስ ማየት ትፈልጋላችሁ? የተቀበልነውን ስብስብ እዚህ፡{quotesLink} ማንበብ ትችላላችሁ።",
|
|
15
|
-
"about.quotesLinkText": "ቃሎች",
|
|
16
|
-
"about.learnMore": "ሰለእስክራች የበለጠ ይወቁ",
|
|
17
|
-
"about.learnMoreFaq": "ተደጋግሞ የሚነሱ ጥያቄዎች",
|
|
18
|
-
"about.learnMoreParents": "መረጃ ለወላጆች ",
|
|
19
|
-
"about.learnMoreEducators": "Information for Educators",
|
|
20
|
-
"about.learnMoreAnnualReport": "Annual Report",
|
|
21
|
-
"about.literacy": "ኮድ መፃፍ ይማሩ፤ ለመማር ኮድ ያድርጉ።",
|
|
22
|
-
"about.literacyImageDescription": "An image of Mitch Resnick giving a TED talk titled \"Let's Teach Kids to Code.\" A play button is in the center of the image.",
|
|
23
|
-
"about.literacyDescription": "In this <a>TED talk</a>, Scratch founder Mitch Resnick describes why the ability to code computer programs is an important part of literacy in today’s society. When people learn to code in Scratch, they learn important strategies for solving problems, designing projects, and communicating ideas.",
|
|
24
|
-
"about.schools": "ስክራች በት/ቤቶች ውስጥ",
|
|
25
|
-
"about.schoolsDescription": "Students are learning with Scratch at all levels (from elementary school to college) and across disciplines (such as math, computer science, language arts, social studies). Educator resources are available on the {scratchForEducatorsLink} page.",
|
|
26
|
-
"about.scratchForEducatorsLinkText": "Scratch For Educators",
|
|
27
|
-
"about.scratchedLinkText": "ScratchEd ድረ-ገፅ",
|
|
28
|
-
"about.research": "ምርምር",
|
|
29
|
-
"about.researchDescription": "The {lifelongKindergartenGroupLink} and collaborators are {researchLink} how young people create, collaborate, and learn with Scratch. For an overview, see the article {codingAtACrossroadsLink} and the book {lifelongKindergartenBookLink}. To find out more about the use of Scratch, see the {statisticsLink} page and the Scratch {annualReportLink}.",
|
|
30
|
-
"about.researchLinkText": "researching",
|
|
31
|
-
"about.statisticsLinkText": "ስታቲስቲክስ",
|
|
32
|
-
"about.lifelongKindergartenGroupLinkText": "Lifelong Kindergarten group",
|
|
33
|
-
"about.codingAtACrossroadsLinkText": "Coding at a Crossroads",
|
|
34
|
-
"about.lifelongKindergartenBookLinkText": "ላይፍሎንግ ኪንደርጋርተን",
|
|
35
|
-
"about.annualReportLinkText": "Annual Report",
|
|
36
|
-
"about.support": "ድጋፍ እና የገንዘብ እርዳታ ",
|
|
37
|
-
"about.supportDescription": "Scratch is available for free, thanks to support from our {donorsLink}. This support helps us provide kids around the world with opportunities to imagine, create, and share. You can support Scratch by making a donation {donateLink}.",
|
|
38
|
-
"about.donorsLinkText": "donors",
|
|
39
|
-
"about.donateLinkText": "እዚህ",
|
|
8
|
+
"about.introLearnMore": "Learn more at Scratch Foundation",
|
|
9
|
+
"about.support": "Support Scratch",
|
|
10
|
+
"about.supportDescription1": "Scratch is available for free, thanks to our {supportersLink}. This support helps us provide young people around the world with opportunities to imagine, create, and share.",
|
|
11
|
+
"about.supportDescription2": "Every dollar donated gives one child access to free, playful, and powerful creative learning through the Scratch community.",
|
|
12
|
+
"about.supportDescription3": "Join us in helping kids everywhere create what they imagine.",
|
|
13
|
+
"about.supportersLinkText": "supporters",
|
|
40
14
|
"about.donateButton": "ለScratch ለመለገስ"
|
|
41
15
|
}
|
|
@@ -5,37 +5,11 @@
|
|
|
5
5
|
"about.foundationText": "Fundación Scratch",
|
|
6
6
|
"about.introParents": "Información pa pais",
|
|
7
7
|
"about.introEducators": "Información pa educadores",
|
|
8
|
-
"about.
|
|
9
|
-
"about.
|
|
10
|
-
"about.
|
|
11
|
-
"about.
|
|
12
|
-
"about.
|
|
13
|
-
"about.
|
|
14
|
-
"about.quotesDescription": "L'Equipo de Scratch ha recibiu muitos correus de parte de chovens, pais y docents dando-nos as gracias por creyar Scratch. Quiers veyer o que diz a chent? Puetz leyer una colección d'as {quotesLink} que hemos recibiu.",
|
|
15
|
-
"about.quotesLinkText": "citas",
|
|
16
|
-
"about.learnMore": "Aprende mas sobre Scratch",
|
|
17
|
-
"about.learnMoreFaq": "Preguntas Freqüents (FAQ)",
|
|
18
|
-
"about.learnMoreParents": "Información pa pais",
|
|
19
|
-
"about.learnMoreEducators": "Información pa educadors",
|
|
20
|
-
"about.learnMoreAnnualReport": "Informe anyal",
|
|
21
|
-
"about.literacy": "Aprende a programar, programar pa aprender",
|
|
22
|
-
"about.literacyImageDescription": "Una imachen de Mitch Resnick dando una charra TED titulau \"Amostremos a los ninos a codificar\". En o centro d'a imachen amaneixe un botón de reproducción.",
|
|
23
|
-
"about.literacyDescription": "En esta <a>charra TED</a>, lo fundador de Scratch, Mitch Resnick, describe per qué la capacidat de codificar programas informaticos ye una parte important de l'alfabetización en a sociedat actual. Cuan la chent aprende a programar con Scratch, aprende estratechias importants pa resolver problemas, disenyar prochectos y comunicar ideyas.",
|
|
24
|
-
"about.schools": "Scratch en as escuelas",
|
|
25
|
-
"about.schoolsDescription": "Os estudiants aprenden con Scratch en totz os libels (dende a escuela primaria dica a universidat) y en todas as disciplinas (como que matematicas, informatica, luenga y literatura, estudios socials). Os recursos pa educadors son disponibles en a pachina {scratchForEducatorsLink}.",
|
|
26
|
-
"about.scratchForEducatorsLinkText": "Scratch pa educadors",
|
|
27
|
-
"about.scratchedLinkText": "pachina web de ScratchEd",
|
|
28
|
-
"about.research": "Investigación",
|
|
29
|
-
"about.researchDescription": "Lo {lifelongKindergartenGroupLink} y los colaboradors son {researchLink} cómo los chovens creyan, colaboran y aprenden con Scratch. Pa obtener una visión cheneral, consulte l'articlo {codingAtACrossroadsLink} y lo libro {lifelongKindergartenBookLink}. Pa saber mas sobre l'uso de Scratch, consulte la pachina {statisticsLink} y lo {annualReportLink} de Scratch.",
|
|
30
|
-
"about.researchLinkText": "investigando",
|
|
31
|
-
"about.statisticsLinkText": "estatisticas",
|
|
32
|
-
"about.lifelongKindergartenGroupLinkText": " Grupo de Lifelong Kindergarten \"chardín de infancia Lifelong\"",
|
|
33
|
-
"about.codingAtACrossroadsLinkText": "Codificación en Crossroads \"cruzillata\"",
|
|
34
|
-
"about.lifelongKindergartenBookLinkText": "Chardín de infancia Lifelong",
|
|
35
|
-
"about.annualReportLinkText": "Informe anyal",
|
|
36
|
-
"about.support": "Emparo y financiamiento",
|
|
37
|
-
"about.supportDescription": "Scratch ye disponible de forma gratuita, gracias a l'emparo d'o nuestro {donorsLink}. Este emparo nos aduya a proporcionar a los ninos arredol d'o mundo oportunidatz pa imachinar, creyar y compartir. Puetz emparar a Scratch fendo una donación {donateLink}.",
|
|
38
|
-
"about.donorsLinkText": "donants",
|
|
39
|
-
"about.donateLinkText": "aquí",
|
|
8
|
+
"about.introLearnMore": "Learn more at Scratch Foundation",
|
|
9
|
+
"about.support": "Support Scratch",
|
|
10
|
+
"about.supportDescription1": "Scratch is available for free, thanks to our {supportersLink}. This support helps us provide young people around the world with opportunities to imagine, create, and share.",
|
|
11
|
+
"about.supportDescription2": "Every dollar donated gives one child access to free, playful, and powerful creative learning through the Scratch community.",
|
|
12
|
+
"about.supportDescription3": "Join us in helping kids everywhere create what they imagine.",
|
|
13
|
+
"about.supportersLinkText": "supporters",
|
|
40
14
|
"about.donateButton": "Donar"
|
|
41
15
|
}
|