Lokalizácia dynamickej aplikácie, akou je Sprout Social, do viacerých jazykov je zložitá záležitosť. Preklad textu, ktorý sa objaví v aplikácii, je len jedna polovica príbehu. Zahŕňa to aj vývoj našej aplikácie spôsobom, ktorý uľahčuje extrahovanie a výmenu tohto textu za preklady. V spoločnosti Sprout sa pri prekladoch spoliehame na predajcov tretích strán. Stále však potrebujeme nástroje na extrahovanie, zoskupovanie a odosielanie žiadostí o preklad týmto dodávateľom a následne poskytovanie a poskytovanie prekladov koncovým používateľom.



Po celé roky si tím inžinierov Sprout vystačil s vlastným lokalizačným riešením, pretože open source riešenia stále dozrievali. Umožnilo nám to vyhovieť našim najväčším zákazníkom v podporovaných jazykoch, ale chýbali mu niektoré užitočné funkcie. V tomto článku načrtnem náš nový lokalizačný systém, ako sa vysporiada s najkomplikovanejšími scenármi lokalizácie a ako sme tieto zmeny postupne zaviedli v rámci organizácie webového inžinierstva.




čo predstavuje 9

Náš starý systém

Ak chcete porozumieť nášmu novému lokalizačnému systému, musíte najprv pochopiť, ako náš starý systém fungoval a oblasti, v ktorých by sme ho mohli vylepšiť.

Syntax správy

Lokalizácia aplikácie funguje tak, že abstrahuje text, ktorý je viditeľný pre koncového používateľa, do reťazcových jednotiek nazývaných správy. Tieto správy sú extrahované a odoslané prekladateľom. Abstrahovaním týchto reťazcov ich môžeme ľahko vymeniť v závislosti od preferovaného jazyka koncového používateľa.

Tieto správy môžu byť jednoduché statické reťazce ako „Dobrý deň, svet“ alebo môžu obsahovať zástupné symboly ako „Dobrý deň, {meno}“ alebo formátovať formátovaný text ako „Ahoj, svet“. Keďže tieto funkcie musia byť serializované do reťazcov, na správny preklad a vykreslenie textu potrebujete syntax, ktorej rozumejú prekladatelia aj kód aplikácie.

Časť toho, čo sťažilo používanie nášho starého lokalizačného systému, bolo to, že sme si vytvorili vlastnú syntax a udržiavali domáci „analyzátor“ pre uvedenú syntax. Údržba tohto kódu bola časovo náročná a syntax bola dosť minimálna. Chceli sme ďalšie funkcie, ktoré nám pomôžu vykresliť zložitejšie správy.

Príklad: V aplikácii Sprout potrebujeme spôsob vykreslenia „Máte X príspevkov“, kde X je dynamická číselná hodnota.



Zvážte pád v množnom čísle: „Máte 5 príspevky “. Zvážte jediný prípad: „Máte 1 príspevok “. Zvážte prípad „0“. Zvážte jazyky, ktoré môžu mať gramatiku pre prípad „1“, ako je čínština a japončina. Zvážte jazyky, ktoré majú gramatiku pre prípad, keď X je „veľké číslo“, ako je arabčina, poľština a ruština.

Správa správ

Máme správy, ktoré môžeme posielať prekladateľom a vymieňať ich v našej aplikácii. Naša aplikácia potrebuje spôsob ukladania týchto správ a ich poskytovania našim koncovým používateľom.

Náš starý systém ukladal všetky naše správy do súborov JSON (nazývali sme „súbory lang“), ktoré boli spravované manuálne. Na správy v týchto súboroch sme odkazovali pomocou ID v našom zdrojovom kóde JavaScript. Keď používateľ chcel aplikáciu v španielčine, poskytli by sme naše súbory v španielčine a potom by javascript vykreslil zodpovedajúcu správu v španielčine pomocou ID.



Z dôvodov výkonu sme sa pokúsili zobraziť iba správy používateľov, ktoré boli na tejto stránke, takže sme mali samostatné jazykové súbory pre rôzne stránky aplikácie. Bol to platný systém, ale ako sa náš tím a aplikácia škálovali, znamenalo to pre vývojárov viac manuálneho času na vytváranie a spravovanie týchto ID a langových súborov.

  Snímka obrazovky JavaScriptu, ktorý sa predtým používal na manuálne spravovanie správ a prekladov v aplikácii Sprout's codebase.

Aby vývojári mohli do aplikácie pridať novú správu, museli ich manuálne pridať do správneho jazykového súboru s jedinečným ID, aby na danú správu odkazovali. Občas sme narazili na problémy s kolíziami ID a preklepmi v ID, ktoré viedli k chýbajúcemu jazyku v aplikácii. Pridávanie textu do webovej aplikácie bolo zdĺhavé s mnohými krokmi, ktoré neboli intuitívne.


najsilnejšie číslo

Naše nové riešenie

Po vedomí týchto nedostatkov weboví inžinieri z celej produktovej organizácie vytvorili pracovnú skupinu pre lokalizáciu, aby vyvinuli riešenie. Pravidelne sme sa stretávali na brainstorming. Po hĺbkovom výskumnom procese sme sa rozhodli migrovať aplikáciu Sprout z nášho domáceho lokalizačného systému na používanie FormatJS. reagovať-intl knižnicu a vybudovať okolo nej infraštruktúru na správu našich správ. React-intl bola najbohatšia a najpopulárnejšia open source lokalizačná knižnica v ekosystéme javascript a dobre integrovaná do našej kódovej základne.

Syntax správy

Chceli sme robustnejšie riešenie a nechceli sme vytvárať niečo od začiatku. Prijali sme Syntax správy ICU , štandardizovaná syntax, ktorá sa používa v aplikáciách Java, PHP a C a zachytáva zložitosť dynamických aplikačných správ. The reagovať-intl knižnica tiež podporuje analýzu a vykresľovanie správ syntaxe správ ICU.

  Príklad vedľa seba, ako syntax správy ICU zachytáva množné čísla. Vľavo je správa v angličtine, predtým, než bude preložená do ruštiny. Na pravej strane je správa preložená do ruštiny. Všimnite si, ako keď prekladatelia konvertujú túto správu do iných jazykov, môžu podľa potreby pridávať a odstraňovať prípady na správnu podporu jazyka. Ruský preklad tejto správy pridáva „málo“ a „veľa“ prípadov.

Toto je príklad toho, ako syntax správy ICU zachytáva množné čísla. Toto je správa v angličtine a ruštine. Všimnite si, ako keď prekladatelia konvertujú túto správu do iných jazykov, môžu podľa potreby pridávať a odstraňovať prípady na správnu podporu jazyka. Ruský preklad tejto správy pridáva „málo“ a „veľa“ prípadov.

Syntax správy ICU bola testovaná mnohými aplikáciami v nespočetných jazykoch. Mohli sme sa spoľahnúť, že dokáže podporiť naše sofistikované potreby zákazníkov a že existuje veľa riešení a/alebo vzdelávacích zdrojov pre akékoľvek otázky týkajúce sa lokalizácie, na ktoré sme narazili.

Správa správ

Vyvinuli sme systém využívajúci nástroje od FormatJS, ktoré by automatizovali proces pridávania, odstraňovania a ukladania správ. Zahŕňalo to niekoľko filozofických zmien v tom, ako sme pristupovali k ukladaniu správ a odkazovaniu na ne.


111 anjelský význam

Hlavnou zmenou oproti nášmu starému systému, ktorú FormatJS podporuje, bolo používanie nášho kódu používateľského rozhrania ako zdroja pravdy pre správy. V našom predchádzajúcom systéme bol zdroj správ a použitie správ na dvoch rôznych miestach, čo znamenalo, že sme ich museli synchronizovať. Náš nový systém uchováva zdroje správ so zvyškom kódu používateľského rozhrania. Potrebujeme jednoducho spustiť skript, ktorý extrahuje všetky správy zo súborov používateľského rozhrania, aby sa vygenerovali naše jazykové súbory, a obsah správy sa pomocou hašovacej funkcie stane jedinečným ID.

  Snímka obrazovky JavaScriptu, ktorý sa predtým používal na automatickú správu správ a prekladov v aplikácii Sprout's codebase.

Táto zmena spája správy s kódom používateľského rozhrania a mala niekoľko výhod:

  • Viac čitateľné: V našom kóde používateľského rozhrania už žiadne ID, ktoré sú určené pre roboty. Teraz môžeme čítať anglické správy v kóde používateľského rozhrania a pochopiť, aký text používateľ uvidí.
  • Nemanuálne ID: Tieto ID, ktoré používali iba stroje, teraz generujú stroje a podľa definície sú jedinečné pre každú správu.
  • Žiadne manuálne spravované jazykové súbory: Vývojári by sa nemali musieť dotýkať týchto jazykových súborov. Naše skripty riadia pridávanie a odstraňovanie správ.

Ako sme migrovali?

Ako sme však migrovali celý náš tím webového inžinierstva a kódovú základňu do tohto nového systému? Rozdelili sme to do štyroch míľnikov: pilotovanie nového systému, vzdelávanie nášho tímu, zastarávanie starého systému a migrácia na naše nové riešenie.


422 číslo anjela

Pilotovanie nového systému

Pracovná skupina testovala nový systém v špecifických častiach aplikácie, aby získala predstavu o jeho osvedčených postupoch a celom rozsahu migrácie. Vďaka tomu bol nový systém nastavený na strane klienta (poly-filly atď.) a na strane zostavenia aplikácie. To nám umožnilo zopakovať skúsenosti vývojárov a znížiť riziko.

Vzdelávanie

Vzali sme to, čo sme sa naučili z pilotného programu, a použili sme to na vzdelávanie celého tímu webového inžinierstva. Vyvinuli sme často kladené otázky a ďalšiu vzdelávaciu dokumentáciu a prezentácie na pomoc vývojárom pri používaní novej knižnice. Je ľahké tento krok podceniť, no táto časť migrácie je mimoriadne dôležitá. Nezáleží na tom, aký dobrý je váš nový systém – ľudia musia vedieť, ako a prečo by ho mali používať.

Vyvinuli sme tiež ambasádorský program, kde každý tím webových funkcií v Sprout mal menovaného lokalizačného ambasádora, ktorý bol zodpovedný za pomoc pri vzdelávaní ich tímu o novom systéme a nahlasovanie problémov alebo bolestivých bodov pracovnej skupine.

To nám umožnilo delegovať zodpovednosť za vzdelávanie a identifikovať problémy špecifické pre jednotlivé tímy.

Zavrhovanie starého systému

Po tom, čo sme si boli istí vývojovými skúsenosťami, zdieľanými znalosťami a škálovateľným potenciálom nového systému, sme starý systém zavrhli. Vytvorili sme niekoľko vlastných pravidiel eslint a použili sme nástroj na linting, esplint , zablokovať používanie starého systému a zároveň povoliť existujúce použitia. Od tohto bodu sa od webových inžinierov očakávalo, že budú pri písaní nového kódu používať nový systém.

Prechod na náš nový systém

S dôverou v náš nový systém a pevným počtom starých použití sme začali s migráciou.

Mnoho použití malo v novom systéme ekvivalenty jedna k jednej. Tam, kde tieto ekvivalenty existujú, sme boli schopní zautomatizovať migráciu napísaním kódu-modu pomocou jscodeshift . Boli sme schopní opakovane spúšťať modifikáciu kódu cez časti kódovej základne, pričom sme sa učili a opravovali problémy za pochodu. Zostávalo len málo okrajových puzdier, ktoré sa nedali ľahko kódovať, takže sme sa cítili pohodlne pri ich ručnom opravovaní.

Zavádzanie

Prečo sme sa rozhodli pre takýto iteratívny prístup namiesto snahy migrovať všetko naraz? Používanie iteratívneho prístupu je súčasťou inžinierskej kultúry spoločnosti Sprout a veríme v neustále vzdelávanie a zlepšovanie.


22 znamená láska

Tým, že sme k migrácii pristupovali týmto spôsobom, mohli sme sa učiť za pochodu, upravovať a opravovať problémy v reálnom čase. Zmeny by sme tiež mohli vrátiť späť, ak by migrácia začala blokovať vývoj aplikácií. Náš iteračný prístup nám umožnil dosiahnuť pokrok pri práci na iných iniciatívach a umožnil nám označiť hlavné zmeny v menšej skupine predtým, ako ich sprístupníme všetkým. Rovnaké princípy vývoja funkcií pre aplikáciu platia pre vývoj interných vývojárskych nástrojov.

Poučenia a poznatky

Prepracovanie nášho lokalizačného systému bolo obrovským záväzkom v rámci celej organizácie webového inžinierstva. Moja rada pre ostatných, ktorí čelia podobným projektom alebo výzvam, by bola:

  • Používajte všeobecne uznávané normy: Prečo vytvárať vlastnú syntax správy, keď inžinieri, ktorí strávili roky premýšľaním o tomto problémovom priestore, už vyvinuli syntax správy ICU?
  • Zvážte umiestnenie súvisiacich položiek: Ich pridávanie, zmena a odstraňovanie bude oveľa jednoduchšie.
  • Prijmite opakované zavádzanie: Navrhnite zavedenie svojej zmeny spôsobom, ktorý vám umožní učiť sa za pochodu. Nemôžete predvídať všetko, preto si vytvorte priestor, aby ste sa mohli obrátiť na svoj plán.
  • Podeľte sa o svoje poznatky: Vzdelávanie je polovica zavedenia. Nezáleží na tom, aký dobrý je váš nový systém, ak ľudia nevedia, ako ho používať alebo prečo je lepší.

Viac informácií o inžinierskej kultúre spoločnosti Sprout nájdete na našej stránke kariérna stránka dnes.

Zdieľajte So Svojimi Priateľmi: