DEV Community

Cover image for Added English / Hindi Language Toggle
Weird Codes
Weird Codes

Posted on • Originally published at weirdcodes.itch.io

Added English / Hindi Language Toggle

ЁЯХЙя╕П рдореЛрдХреНрд╖ тАФ Devlog v0.0.9

рджреНрд╡рд┐рднрд╛рд╖реА рдореЛрдХреНрд╖ тАФ English / Hindi Language Toggle

Issue: #36 ┬╖ Milestone: v0.1
Labels: UI ┬╖ accessibility ┬╖ enhancement


рдХреНрдпреЛрдВ

рдореЛрдХреНрд╖ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд╣рд┐рдВрджреА рдореЗрдВ рдерд╛ред README рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд▓рд┐рдЦрд╛ рдерд╛ тАФ

"For now its only for hindi users who deeply understand hindu philosophy."

рдкрд░ рдпрд╣ рдПрдХ рд╕реАрдорд╛ рдереА, рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВред рдЦреЗрд▓ рдХреА рд╕рд╛рд░реА рдпрдВрддреНрд░рд┐рдХреА тАФ рдкреНрд░рд╛рд░рдмреНрдз, рд╡реИрд░рд╛рдЧреНрдп, рд╕рдорд░реНрдкрдг тАФ рдЧрд╣рд░реЗ рд╢рд╛рд╕реНрддреНрд░реАрдп рдЕрд░реНрде рд░рдЦрддреА рд╣реИред рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣рд┐рдВрджреА рдирд╣реАрдВ рдкрдврд╝рддрд╛, рд╡рд╣ рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдХреЗ рдХрд╛рд░рдг рдЙрд╕ рджрд░реНрд╢рди рд╕реЗ рд╡рдВрдЪрд┐рдд рд░рд╣ рдЬрд╛рддрд╛ рдерд╛ред

рдпрд╣ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдХрд╛рдо рдирд╣реАрдВ рдерд╛ред рдпрд╣ рджреНрд╡рд╛рд░ рдЦреЛрд▓рдиреЗ рдХрд╛ рдХрд╛рдо рдерд╛ред


рд╢рд╛рд╕реНрддреНрд░реАрдп рдирд┐рдпрдо тАФ рдЕрдиреБрд╡рд╛рдж рдХреА рд╕реАрдорд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓рд╛ рдирд┐рд░реНрдгрдп рддрдХрдиреАрдХреА рдирд╣реАрдВ, рд╢рд╛рд╕реНрддреНрд░реАрдп рдерд╛: рдХреНрдпрд╛-рдХреНрдпрд╛ рдЕрдиреВрджрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛?

рдирд┐рдпрдо E-1 тАФ рд╢реНрд▓реЛрдХ рдХрднреА рдЕрдиреВрджрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ

рдореАрдорд╛рдВрд╕рд╛-рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдордиреНрддреНрд░ рдореЗрдВ рд╢рдмреНрдж-рд╢рдХреНрддрд┐ рд╣реИ, рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП English mode рдореЗрдВ рднреА рд╣рд░ рд╢реНрд▓реЛрдХ рдореВрд▓ рджреЗрд╡рдирд╛рдЧрд░реА рдореЗрдВ рд╣реА рд░рд╣рддрд╛ рд╣реИред рдиреАрдЪреЗ рдХреЗрд╡рд▓ рдЕрдиреНрд╡рдпрд╛рд░реНрде рдЬреБрдбрд╝рддрд╛ рд╣реИред

рдирд╛рдо рдЬрдкрдд рдордВрдЧрд▓ рджрд┐рд╕рд┐ рджрд╕рд╣реВрдБрее
By chanting the N─Бma, auspiciousness arises in all ten directions.
тАФ R─Бmacaritam─Бnasa
Enter fullscreen mode Exit fullscreen mode

рдкрд╣рд▓реЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдореИрдВрдиреЗ рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдЦрд╛ рдерд╛ тАФ "Auspiciousness in all ten directions"ред рдпрд╣ рдЧрд╝рд▓рдд рдерд╛: рдХрд░реНрддрд╛ рд╣реА рд▓реБрдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдореВрд▓ рдЪреМрдкрд╛рдИ рдХрд╛рд░рдг-рдХрдерди рд╣реИ (рдирд╛рдо-рдЬрдк рд╕реЗ рдордВрдЧрд▓ рд╣реЛрддрд╛ рд╣реИ), рд╕реНрдерд┐рддрд┐-рдХрдерди рдирд╣реАрдВред рдПрдХ рдкрдж рдЫреВрдЯрдиреЗ рд╕реЗ рдкреВрд░реА рдЪреМрдкрд╛рдИ рдХрд╛ рд╣рд╛рд░реНрдж рдЧрд┐рд░ рдЧрдпрд╛ред

рдЕрдиреНрд╡рдпрд╛рд░реНрде рдХрд╛ рдирд┐рдпрдо: рдХреЛрдИ рдкрдж рди рдЫреЛрдбрд╝реЗрдВ, рдХреЛрдИ рднрд╛рд╡ рди рдЬреЛрдбрд╝реЗрдВред

рдирд┐рдпрдо E-3 тАФ рдкрд╛рд░рд┐рднрд╛рд╖рд┐рдХ рд╢рдмреНрдж transliteration-first

рдкрд╛рдк рдХреЛ bad karma рдХрд╣рдирд╛ рдЕрд░реНрде-рд╕рдВрдХреЛрдЪ рд╣реИред рдкрд╛рдк рдиреИрддрд┐рдХ рдмреБрд░рд╛рдИ рдирд╣реАрдВ тАФ рдорд▓рд┐рдирддрд╛ / рдЛрдг рд╣реИред

рд╣рд┐рдВрджреА тЭМ тЬЕ
рдкрд╛рдк Bad Karma P─Бpa
рдкреБрдгреНрдп Good Karma Puс╣Зya
рдкреНрд░рд╛рд░рдмреНрдз Past-life karma Pr─Бrabdha
рдХреГрдкрд╛ Grace Kс╣Ыp─Б (grace)
реР Om реР (рдХрднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛)

Grace рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ тАФ рд╡рд╣ рдИрд╕рд╛рдИ рдзрд░реНрдорд╢рд╛рд╕реНрддреНрд░ рдХрд╛ рднрд╛рд░рд┐рдд рд╢рдмреНрдж рд╣реИред


рд╡рд╛рд╕реНрддреБрдХрд▓рд╛

src/i18n.js тАФ рднрд╛рд╖рд╛-рдкреНрд░рдмрдВрдзрдХ

DOM рдкрд░ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП engine.js рдФрд░ render.js рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд import рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

initLang()    тЖТ localStorage рд╕реЗ рдкрд╕рдВрдж рдкрдврд╝реЗрдВ
getLang()     тЖТ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛
setLang()     тЖТ рдмрджрд▓реЗрдВ + persist + subscribers рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ
t(key, params)тЖТ lookup + {placeholder} interpolation
resolveAlert()тЖТ render-time рдкрд░ alert рдХрд╛ рдЕрдиреБрд╡рд╛рдж
Enter fullscreen mode Exit fullscreen mode

Fallback chain: current lang тЖТ hi тЖТ key рд╕реНрд╡рдпрдВ. рдХреЛрдИ key рдЫреВрдЯ рдЬрд╛рдП рддреЛ рдЧреЗрдо crash рдирд╣реАрдВ рд╣реЛрддрд╛ тАФ рд╣рд┐рдВрджреА рджрд┐рдЦрддреА рд╣реИред

Late binding тАФ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрдгрдп

Alert queue рдореЗрдВ resolved string рдирд╣реАрдВ, key store рд╣реЛрддреА рд╣реИред рдЕрдиреБрд╡рд╛рдж render рд╕рдордп рдкрд░ рд╣реЛрддрд╛ рд╣реИред

// alertQueue рдореЗрдВ:
{ titleKey: 'alert.chetana.title', params: null, icon: 'ЁЯСБя╕П' }

// render.js рдореЗрдВ, рд╣рд░ frame:
const { icon, title, subtitle } = resolveAlert(a);
Enter fullscreen mode Exit fullscreen mode

рдЗрд╕рд╕реЗ рдмреАрдЪ рдЦреЗрд▓ рдореЗрдВ рднрд╛рд╖рд╛ рдмрджрд▓рдиреЗ рдкрд░ queue рдореЗрдВ рдкрдбрд╝реЗ рдкреБрд░рд╛рдиреЗ cards рднреА рдирдИ рднрд╛рд╖рд╛ рдореЗрдВ render рд╣реЛрддреЗ рд╣реИрдВред рдХреЛрдИ рдорд┐рд╢реНрд░рд┐рдд-рднрд╛рд╖рд╛ UI рдирд╣реАрдВред

рд╕рд╛рде рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡: emoji рдЕрдм strings рд╕реЗ рдирд┐рдХрд▓рдХрд░ code рдореЗрдВ рдЖ рдЧрдПред рдкрд╣рд▓реЗ _updateAlert() regex рд╕реЗ leading emoji рдирд┐рдХрд╛рд▓рддрд╛ рдерд╛ тАФ рдЕрдм рд╡рд╣ рдкреВрд░реА рдкрд░рдд рд╣реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдИред рднрд╛рд╖рд╛-рдирд┐рд░рдкреЗрдХреНрд╖ рдЪреАрдЬрд╝ рднрд╛рд╖рд╛-рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреНрдпреЛрдВ рд░рд╣реЗ?

src/shastra.js тАФ рд╕рдВрд░рдЪрд┐рдд рдЧреНрд░рдВрде

рд╢рд╛рд╕реНрддреНрд░-рдЧреНрд░рдВрде i18n.js рдореЗрдВ рдирд╣реАрдВ рдЧрдпрд╛ред рдХрд╛рд░рдг:

UI strings рд╢рд╛рд╕реНрддреНрд░
рд╕реНрд╡рд░реВрдк рдЫреЛрдЯреЗ, рдмрд┐рдЦрд░реЗ, {n} рд╕рд╣рд┐рдд рд▓рдВрдмрд╛ рд╕рддрдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝
markup рдХреЛрдИ рдирд╣реАрдВ <strong>, <em>, рд╢реНрд▓реЛрдХ
рдЙрдкрдпреЛрдЧ рд╣рд░ frame overlay рдЦреБрд▓рдиреЗ рдкрд░ рдПрдХ рдмрд╛рд░

рд╣рд░ рдЕрдиреБрдЪреНрдЫреЗрдж рдЕрдм рдПрдХ object рд╣реИ тАФ markup рдкрд╛рда рдореЗрдВ embed рдирд╣реАрдВ:

{ type: 'term', label: 'ЁЯУЬ рдкреНрд░рд╛рд░рдмреНрдз', text: '...' }
{ type: 'shloka', id: 'prarabdha' }        // рд╢реНрд▓реЛрдХ-рдХреЛрд╢ рд╕реЗ
{ type: 'note', text: '...', color: '#ff3232' }
Enter fullscreen mode Exit fullscreen mode

рд╢реНрд▓реЛрдХ-рдХреЛрд╢ рднрд╛рд╖рд╛-рдирд┐рд░рдкреЗрдХреНрд╖ рд╣реИ тАФ рдПрдХ рд╣реА рдмрд╛рд░ рд▓рд┐рдЦрд╛, рджреЛрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ id рджреНрд╡рд╛рд░рд╛ referencedред рдПрдХ рдЬрдЧрд╣ рд╕реБрдзрд╛рд░рдиреЗ рдкрд░ рджреЛрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реБрдзрд░рддрд╛ рд╣реИред


рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдорд┐рд▓реЗ рдмрдЧ

рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдХрд╛рдо рдХреЛрдб рдХреА рд╕рдлрд╝рд╛рдИ рднреА рдХрд░рд╛ рдЧрдпрд╛ред рдЬреЛ рдирд┐рдХрд▓рд╛:

рджреГрд╢реНрдпрдорд╛рди

рдмрдЧ рдкреНрд░рднрд╛рд╡
laguage-toggle (id рдореЗрдВ n рдЧрд┐рд░рд╛) languageToggle рд╕рджрд╛ null тАФ рдкреВрд░рд╛ рдЯреЙрдЧрд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдерд╛, ?. рдиреЗ рдЪреБрдкрдЪрд╛рдк рдирд┐рдЧрд▓ рд▓рд┐рдпрд╛
last.Time = ... R (рдкреБрдирд░реНрдЬрдиреНрдо) рджрдмрд╛рддреЗ рд╣реА рдкреВрд░рд╛ keydown handler рдЯреВрдЯрддрд╛
_tutorialClickRead tutorial card рдХреНрд▓рд┐рдХ рд╕реЗ рдХрднреА рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛
info.alert рджреЛрд╣рд░рд╛ call рд╣рд░ рд╢рдВрдЦ/рдЬреНрдпреЛрддрд┐ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рджреЛ alerts, рдПрдХ рдЦрд╛рд▓реА

рдореМрди тАФ рдЬреЛ рдЕрдХреЗрд▓реЗ рдХрднреА рди рдкрдХрдбрд╝реЗ рдЬрд╛рддреЗ

1. aria-describedby="language-choicce-status" тАФ рджреЛ cред screen-reader рдХреЛ рднрд╛рд╖рд╛-рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕реВрдЪрдирд╛ рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рддреА рдереАред issue #36 рдкрд░ accessibility label рд▓рдЧрд╛ рдерд╛ тАФ рдФрд░ рдпрд╣реА рдЙрд╕рдХрд╛ рдореВрд▓ рдерд╛ред

2. padding:10px, 28px тАФ CSS рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдЕрдорд╛рдиреНрдп рд╣реИред рдкреВрд░реА declaration рдЪреБрдкрдЪрд╛рдк рдЧрд┐рд░ рдЬрд╛рддреА рдереА; рдЧреБрд░реБ-рджреАрдХреНрд╖рд╛ рдмрдЯрди рдмрд┐рдирд╛ padding рдХреЗ рд╕рд┐рдХреБрдбрд╝рд╛ рд░рд╣рддрд╛ред

3. letter-spacing:0.5pxl тАФ pxl рдХреЛрдИ рдЗрдХрд╛рдИ рдирд╣реАрдВред рд╡рд╣реА рдореМрди рд╡рд┐рдлрд▓рддрд╛ред

4. overlayTitle.style.fontFamily рдХреЗрд╡рд▓ рдкреНрд░рд▓рдп-рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реЗрдЯ рд╣реЛрддрд╛ рдерд╛ред DOM element рд╕рд╛рдЭрд╛ рд╣реИ тАФ рдПрдХ рдмрд╛рд░ рдкреНрд░рд▓рдп рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╣ font рдореЛрдХреНрд╖ рдФрд░ рдкреБрдирд░реНрдЬрдиреНрдо рдкрд░ рднреА рдЪрд┐рдкрдХрд╛ рд░рд╣ рдЬрд╛рддрд╛ред

5. 'Orbitron', sans-serif тАФ Orbitron рдореЗрдВ рджреЗрд╡рдирд╛рдЧрд░реА glyphs рд╣реИрдВ рд╣реА рдирд╣реАрдВред рд╣рд┐рдВрджреА alerts browser fallback рдореЗрдВ render рд╣реЛрддреЗ рдереЗ, рдЕрд╕рдВрдЧрдд baseline рдХреЗ рд╕рд╛рдеред

6. CARD_H = 290 рд╕реНрдерд┐рд░ рдерд╛ред рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдкрд╛рда рджреЗрд╡рдирд╛рдЧрд░реА рд╕реЗ ~25% рд▓рдВрдмрд╛ рд╣реЛрддрд╛ рд╣реИ тАФ tutorial card рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рдФрд░ hint pill dismiss-button рдкрд░ рдЪрдврд╝ рдЬрд╛рддреАред рдЕрдм рдКрдБрдЪрд╛рдИ рдорд╛рдкреА рд╣реБрдИ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдмрдирддреА рд╣реИ:

const CARD_H = HEADER_H
             + shlokaLines.length  * LH_SHLOKA
             + meaningLines.length * LH_MEANING
             + taskLines.length    * LH_TASK
             + ...
Enter fullscreen mode Exit fullscreen mode

рд╕рд╛рде рдореЗрдВ рдПрдХ wrapText() helper тАФ рдХреНрдпреЛрдВрдХрд┐ fillText(..., maxWidth) wrap рдирд╣реАрдВ рдХрд░рддрд╛, glyphs рдХреЛ рджрдмрд╛рдХрд░ рд╕рдБрдХрд░рд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рд╣рд┐рдВрджреА рдХреА рдЫреЛрдЯреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдХрднреА рджрд┐рдЦрд╛ рд╣реА рдирд╣реАрдВ рдерд╛ред

рд╢рд╛рд╕реНрддреНрд░реАрдп

рд╕рдмрд╕реЗ рд╕рдВрддреЛрд╖рдЬрдирдХ рд╕реБрдзрд╛рд░ рдпрд╣ рд░рд╣рд╛ред index.html рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛:

ЁЯкв рд▓рдЧрд╛рдо (рдорди)
ЁЯкИ рд╕рд╛рд░рдереА (рдорди)      тЖР рдорди рджреЛ рдЬрдЧрд╣
Enter fullscreen mode Exit fullscreen mode

рдХрдареЛрдкрдирд┐рд╖рджреН рез.рей.рей рд╕реНрдкрд╖реНрдЯ рд╣реИ:

рдмреБрджреНрдзрд┐рдВ рддреБ рд╕рд╛рд░рдерд┐рдВ рд╡рд┐рджреНрдзрд┐, рдордирдГ рдкреНрд░рдЧреНрд░рд╣рдореЗрд╡ рдЪрее
рдмреБрджреНрдзрд┐ рдХреЛ рд╕рд╛рд░рдереА рдЬрд╛рдиреЛ, рдФрд░ рдорди рдХреЛ рд▓рдЧрд╛рдоред

рд╕рд╛рд░рдереА рдмреБрджреНрдзрд┐ рд╣реИ, рдорди рдирд╣реАрдВред рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд тАФ render.js рдореЗрдВ sprite рдХрд╛ рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ cachedBuddhiSprite рдерд╛ред рдХреЛрдб рд╕рд╣реА рдЬрд╛рдирддрд╛ рдерд╛; рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкреАрдЫреЗ рд░рд╣ рдЧрдпрд╛ рдерд╛ред

рдЕрдм рд╡рд╣реА рд╢реНрд▓реЛрдХ Page 3 рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ тАФ рдкреВрд░реЗ рдЦреЗрд▓ рдХрд╛ рд░реВрдкрдХ рдЬрд┐рд╕ рдкрд░ рдЦрдбрд╝рд╛ рд╣реИ, рд╡рд╣ рдЕрдм рд╕реНрд╡рдпрдВ рдЧреНрд░рдВрде рдореЗрдВ рдЙрдкрд╕реНрдерд┐рдд рд╣реИред


рдЬреЛ рд╕реАрдЦрд╛

grep -c рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЧрд┐рдирддрд╛ рд╣реИ, keys рдирд╣реАрдВред рдХрдИ рдмрд╛рд░ рдЧрд┐рдирддреА рдорд┐рд▓рддреА рджрд┐рдЦреА рдкрд░ keys рдЕрд╕рдВрддреБрд▓рд┐рдд рдереАрдВред рдЕрд╕рд▓реА рдЬрд╛рдБрдЪ рдпрд╣ рдирд┐рдХрд▓реА:

const k = [...src.matchAll(/'([a-z]+\.[A-Za-z0-9.]+)':/g)].map(m => m[1]);
const c = {}; k.forEach(x => c[x] = (c[x]||0) + 1);
Object.entries(c).filter(([,v]) => v !== 2);   // рдЕрд╕рдВрддреБрд▓рд┐рдд keys
Enter fullscreen mode Exit fullscreen mode

рдЗрд╕реА рдиреЗ рдЕрдВрдд рдореЗрдВ 'starat.description' рдкрдХрдбрд╝реА тАФ рдПрдХ рд╡рд░реНрддрдиреА-рджреЛрд╖ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг English mode рдореЗрдВ рд╡рд┐рд╡рд░рдг рд╣рд┐рдВрджреА рдореЗрдВ рджрд┐рдЦ рд░рд╣рд╛ рдерд╛, рдмрд┐рдирд╛ рдХрд┐рд╕реА error рдХреЗред

node --check рдирд╛рдо-рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ред рдПрдХ рдмрд╛рд░ wrapText object рдХреЗ рдЕрдВрджрд░ рдерд╛ рдФрд░ calls рд╕рд╛рджреЗ рдереЗ тАФ syntax рдирд┐рд░реНрджреЛрд╖, рдкрд░ рдЪрд▓рддреЗ рд╣реА ReferenceErrorред Syntax рдкрд╛рд╕ рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдорд╛рдг рдирд╣реАрдВред

git diff | grep "^-" рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реБрд░рдХреНрд╖рд╛-рдЬрд╛рд▓ рдирд┐рдХрд▓рд╛ред рдЕрдВрдд рдХреЗ рджреЛ regression рдЗрд╕реА рд╕реЗ рдкрдХрдбрд╝реЗ рдЧрдП тАФ рдЬрд┐рдирдореЗрдВ рдПрдХ tutorialBtn рдХреА declaration рдереА, рдЬреЛ рдкреИрдЪ рд▓рдЧрд╛рддреЗ рд╕рдордп рдЧрд▓рддреА рд╕реЗ рдорд┐рдЯ рдЧрдИ рдереАред

рдФрд░ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛: git status рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ i18n.js рдФрд░ shastra.js untracked рдереАрдВред commit рд╣реЛ рдЬрд╛рддрд╛ рддреЛ repo рдореЗрдВ рди рдЬрд╛рддреАрдВ тАФ рдмрд╛рдХрд╝реА рд╕рд╛рдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрдиреНрд╣реЗрдВ import рдХрд░рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдФрд░ рдХреЗ clone рдкрд░ рдЧреЗрдо рдмрд┐рд▓рдХреБрд▓ рди рдЪрд▓рддрд╛ред рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рд╕рдм рдареАрдХ рджрд┐рдЦрддрд╛ рд░рд╣рддрд╛ред


рдЖрдБрдХрдбрд╝реЗ

134 keys ├Ч 2 рднрд╛рд╖рд╛рдПрдБ тАФ рдкреВрд░реНрдг рд╕рдВрддреБрд▓рд┐рдд
 40+ alert call sites тАФ literals рд╕реЗ keys рдореЗрдВ
  2 рдирдИ рдлрд╝рд╛рдЗрд▓реЗрдВ тАФ i18n.js, shastra.js
 25+ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдЧ тАФ рдЬрд┐рдирдореЗрдВ рдХрдИ рдореМрди
Enter fullscreen mode Exit fullscreen mode

рдЖрдЧреЗ

  • рд╢рд╛рд╕реНрддреНрд░-рдЧреНрд░рдВрде рдХрд╛ рдЧрд╣рди рджрд╛рд░реНрд╢рдирд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рджреЛрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ
  • IAST transliteration рдХреА рдПрдХрд░реВрдкрддрд╛ рдХреА рд╕рдореАрдХреНрд╖рд╛
  • рджреЗрд╡рдирд╛рдЧрд░реА рдЕрдВрдХ (рел) рдмрдирд╛рдо ASCII (5) тАФ рдЕрднреА рдорд┐рд╢реНрд░рд┐рдд рд╣реИрдВ
  • рддреАрд╕рд░реА рднрд╛рд╖рд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ тАФ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЕрдм рддреИрдпрд╛рд░ рд╣реИ

рдореЛрдХреНрд╖ рдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдорд╛рд░реНрдЧ тАФ рддреНрдпрд╛рдЧред
The only path to liberation тАФ is to let it go.

ЁЯОо itch.io ┬╖ ЁЯТЫ PayPal ┬╖

Developed by Weird Codes

Top comments (0)