🌍 Hvordan jeg hĂ„ndterer over 3200 keys med oversĂŠttelser pĂ„ 5 sprog i Rackbeats webapp

@mikkelrask · December 12, 2023 · 12 min read

Click-bait-disclaimer Jeg hÄndterer ikke noget som helst pÄ fem sprog - men her er lidt om hvordan det lykkedes mig at crowd-source opgaven, og fÄr hjÊlp af Nordens ledende ERP systemer, og hvordan det er gÄet! Og det fede? Det var 100% gratis!

Jeg pÄdrog opgaven af mig selv, i en blanding af en mÄlrettet handling for at minimere antallet af Excel ark og velmenene Word dokumenter med oversÊttelses-rettelser i min chefs indbakke, og som en slags personlig udfordring efter firmaets CTO Lasse, der pÄ davÊrende tidspunkt var bosat i Kuala Lumpur over Slack skrev "jeg giver en Þl i lufthavnen, hvis du ka' lÞse dén!" - og tilfÊldigvis, var i fÊrd med at flytte tilbage til danmark. Hm, en teknologisk udfordring, med en frist? Kan jeg mon nÄ det, inden han ankommer i Danmark, og faktisk fange ham i lufthavnen til en Þl? Det lugter af hyperfixation time!

Udgangspunktet

Hvis du nogensinde har hÄndteret eller bidraget til oversÊttelser af en app eller et website, sÄ ved du ogsÄ at det typisk er noget med et regneark eller word dokument, i 17-18 forskellige udgaver, fordelt ud over 6-7 kollegaers bÊrebare, uden nogen nÞdvendigvis konsensus om termonologi, tone of voice eller hvor dybdegÄende en given tekst behÞves at vÊre.

Da jeg startede i Rackbeat's customer success afdeling, var det ikke meget anderledes. Vores sheet lÄ dog pÄ et Google fÊllesdrev, men i det store hele meget lig.

Rackbeat, som er et ret komplekst lagerstyringssystem - et kÊmpe projekt, med adskillige integrationer og tillÊgspakker, pÄ, dengang 4, nu 5 sprog havde pÄ ingen mÄde brug for at blive mere indviklet. Men bl.a pga. mÄden som oversÊttelserne var startet ud pÄ, virkede dét at Êndre pÄ arbejdsgangen bÄde uoverskuelig, og som én af de dér "ikke lige nu"-tickets, der tit ender som den dÄrlige samvittighed, dér nederst i backlog'en, uge efter uge.

Rackbeat webapp'en har, som mange andre projekter sit base language som Engelsk af hensyn til udviklingen. Og pÄ et tidspunkt tidligt i projektets alder, var der pludseligt oprettet eks. én key der hedder "Customer" og én der hed "Invoice". NÄr man sÄ faldte over et sted, hvor man skulle bruge "Customer Invoice", giver det sÄ ikke mening at i selve UI'et, blot fetche fÞrst key1 og sÄ key2?

Kunde Faktura

Lad os hurtigt prÞve det samme pÄ Dansk.. "Kunde Faktura". Ser lidt forkert ud, ikk'? Det er det ogsÄ. Begge ord er selvfÞlgelig 100% korrekte, men Danskere har brug for at ordene stÄr side om side, helt tÊt. Ellers bliver vi i tvivl om, der er tale om en kunde og en faktura, og der bare er glemt et komma, eller om det er noget helt trejde.

Men altsÄ vores keys fungerede altsÄ som en slags ordbog. Jeg begyndte nu at forstÄ hvad jeg var oppe imod.

Termonologi

Yderligere sĂ„... En knap "Save", en anden "Remember Settings". Nogle med stort forbogstav, nogle med et punktum til slut. Vi kender alle klassikerne - it happens đŸ€·â€â™‚ïž 1
SÄ! Jeg skulle bruge en plan. For at Þge mine chancer for at fÄ et "ja" til at implementere noget som helst, der krÊvede udviklingstimer, skulle det vÊre strÞmlinet ligesom det bÄde skulle inkludere en her-og-nu-lÞsning (kaldet lappelÞsningen, eller skumslukkeren), samt en langsigtet-plan (lÊs: this brings me joy-lÞsningen). Og den lÞsning skulle jeg finde og bevise var det rigtige, helst ogssÄ uden at have et dankort op af lommen - jeg var trods ikke engang nÄet ud over min prÞveansÊttelse, og i Þvrigt ogsÄ ansat i kunde-service, sÄ jeg fÞlte det var for tidligt at spÞrge efter firmaets Pleo-kortet som Kirsten typisk vogter over.

Succes Criteria

SĂ„ jeg skulle jo definere hvad Ăžnskescenariet ville vĂŠre, og indkaldte vores QA, som eneste faktiske reprĂŠsentant fra tech (da vores CTO som tidligere nĂŠvnt boede i Malaysia) og vores fĂŠlles chef til en snak, hvor vi kortlage at Ăžnskerne var fĂžlgende.

  1. Et specialiseret lokalitets-vĂŠrktĂžj, der kan fungere med vores PHP backend - alternativt via vores frontend som er Vue, men ville krĂŠve en stĂžrre omstrukturering
  2. Give nem brugeradgang til samarbejdspartnere og native speakers for vores supporterede lande
  3. Minimere udviklertid, pÄ at fikse indberetninger af manglende eller forkerte strenge
  4. Minimere Customer Succes Supporteres tid
  5. Give et live overblik over status pÄ et hvert givent tidspunkt
  6. Automatisere sÄ "meget som muligt" (vagt defineret kriterie, i know!)
  7. Evt. Machine Learning/Ai-Translations* (Question mark?)

Rigtig meget af det her var ude af scope pÄ mine egentlige arbejdsopgaver - som supporter, hvor jeg vel at mÊrke blot var 1,5 mdr. inde i min prÞve-periode. Men jeg fandt pÄ noget med at "det vel ogsÄ var at hjÊlpe vores kunder pÄ?!" Her henvises til pkt. 4.

Research

Det tager ikke mange Google sÞgninger pÄ noget som helst omkring lokalitetshÄndtering, fÞr man er helt med pÄ, at lokalise er the big cheese. De krÊver sÄ ogsÄ at man har big cheese til dem, til hver den fÞrste. 2
Jeg er jo, til trods for at jeg arbejder for en true cloud/API First software virksomhed, stor fan af "self hosting" og meget bevidst om hvad man kan fÄ for free (both as in "free beer", and "freedom", yes). Og sÄ kan man jo ogsÄ self hoste i skyen. Og det ender vi ogsÄ med at gÞre her!

For jeg sÞger jo selvfÞlgeligt pÄ, hvad jeg nemt kan spinne op i en container, og teste af pÄ min homelab server eller VPS, hvor jeg bla falder over Tolgee.

Tolgee er open source - en af de open source firmaer, der stadig har en forretningsmodel, i at levere et solidt software og hoster det og supporterer dig i det fra a til b! Men ogsÄ guider, hjÊlper og assisterer hvis man hoster sin egen - noget de altsÄ ikke tager penge for!

I matrixen herunder, var nogle af de key selling points, der gjorde at vi gik med Tolgee - github integration var umiddelbart ligegyldig, lidt ligesom notifikationer var det noget vi er i stand til at selv webhook'e os ud af i en Github action eller lign.. Her var the winning lottery numbers hhv. Unlimited number of keys, og Unlimited number of seats. Love to see it!!

Feature Localazy Lokalise Laravel Translation Tolgee
Price model 49 USD* 120 USD* Free Free
Number of keys 3500 5000 Unlimited Unlimited
Number of seats Unlimited 10 Unlimited Unlimited
Price per additional seat No cost 14 USD/mo No cost No cost
Screenshot context ✅ 🛑/✅ ❓ ✅
Textual context ✅ ✅ ❓ ✅
Translation Review ✅ ✅ ❓ ✅
Languages Unlimited Unlimited Unlimited Unlimited
Notifications (Slack, email, zapier, webhooks etc) ✅ ✅ ❓ 🛑
Vue library ✅ ❓ 🛑 ✅
API/CLI/SDK ✅ ✅ ✅ ✅
Github Integration ✅ ✅ Not needed(?) 🛑
Figma/Design tool Integration ✅ ✅ 🛑 ✅
Google AI Translate Integration ✅ ✅ 🛑 ✅
Figma/Design tool Integration ✅ ✅ 🛑 ✅

Machine Translation?

Ud at dÞmme fra matrixen, var det Tolgee eller bust. Jeg ville have det til at lykkedes. Loggede ind pÄ portainer, og satte tolgee op i docker. 2 minutter senere, kunne jeg sidde og oprette keys, redigere deres strings, for alle de sprog jeg havde lyst til, sÄ jeg skyndte mig at oprette en Google Translate API nÞgle, for at se hvordan dét fungerede. Jeg vidste jo at alt "AI" var for buzz word-y for tiden, til at det var gratis, men ved jo at man fÄr de fÞrste fix gratis af Google Translate, sÄ det blev den!

Men som Support medarbejder i et Visma ejet firma, med en Visma email, fÄr man altsÄ ikke bare lov at oprette projekter pÄ Google Cloud Console - huh! Jeg var en blanding af forarget og frustreret over tanken "hvad havde du selv regnet med?" da jeg klikkede pÄ opret og fik beskeden "Din organisation tillader ikke denne handling"

Men jeg oprettede det jo sÄ bare pÄ min egen Google konto, jeg er jo kun nÄet til at teste det hele, som et proof of concept. No biggie...

Her var det sÄledes fÞrste gang i processen der var et dankort oppe af lommen. Google skulle bare have mine digits, just in case, men de er jo gavmilde og giver de fÞrste 10.000 karaktere gratis hver mÄned, for oversÊttelser, og da vi jo trods alt har oversat langt stÞrstedelen af appen, og det mest af alt drejer sig om at strÞmline det, er det gratis antal mere end rigeligt! And more on that - later!

Nem brugeradgang for partnere

Da jeg var inde pÄ Google Cloud Console, tÊnkte jeg ogsÄ at bÄde Rackbeat og Visma bruger GSuite, og GMail, og det derfor var oplagt at oprette en Sign in with Google API nÞgle ogsÄ. Og yderligere, da det ikke var noget der skulle vÊre customer facing, eller public tilgÊngeligt i det hele taget, kunne jeg endda bare lave Google Login'et som et "test-login under udvikling", hvor jeg nemt bÄde kunne styre brugeradgang via whitelisting af "testere" samt slippe uden om Googles lange app review, nÄr man udgiver noget officielt der involverer et Google login.

Automatisk oversĂŠttelse

Som jeg allerede lÞftede slÞret for, tog jeg chance, da jeg greb mit efterhÄnden mat-sorte Lunar-bank betalingskort op af lommen i arbejdsÞjemed. For vi havde jo fÄet systemet op og kÞre, og alt var godt. Hvad jeg ikke vidste, var dog - at sÄ lÊnge man i Tolgee havde signaleret at man Þnsker automatisk oversÊttelse, sÄ er det ikke nÞdvendigt at bekrÊfte hvilken machine translation man Þnsker udfÞrt - du fÄr bare for de providers du har aktiveret.

Vores fantastiske nord markedonske udvikler Andrej fÞrte samtlige keys over i vores base language, som vi havde planlagt og aftalt. Ikke mange dage gÄr der, fÞr end der er en mail fra Google med emnet: Din regning er klar. PANIK!

Tolgee var gĂ„et i krig med at oversĂŠtte samtlige strings, til samtlige keys - med rystende hĂŠnder, fik jeg Ă„bnet PDF for det, der havde akkomuleret sig op pĂ„ 21.000 oversatte karaktere - 11.000 flere end de gratis som Google jo tilbĂžd: $2.10 - To dollars og ti fucking cents. PHEW! DĂ©t er okay, venner, jeg betaler denne gang! đŸ˜€

Generel automatisering

Den Þvrige automatisering er helt klassisk - fÞrst var vi ude i om vi skulle bruge webhooks til at notificere fx en slack kanal oprettet til formÄlet, men vi (dvs. Andrej!) havde allerede lavet et andet flow, til udviklerne, der nÄr de eks. opretter en PR, bliver de promptet om hvorvidt koden i PR'et indeholder nye keys - Svares der ja, sÄ triggers der en sync af de keys der er pÄ den givne udviklers branch, op og oprettes som keys i vores lokale tolgee instance, og kunne jo sÄ passende bruge samme action, til at lade en bot vide, at den skulle lave lidt larm for de nye keys, i vores #translations-slack-trÄd.

Konklusionen - how did it go?

Indtil videre er konklusionen at den kortsigtede plan, mÄske gik hen og gÄ sÄ godt, at det nok lidt mÄske ogsÄ blev den langsigtede plan - at implementere de biblioteker som Tolgee har udviklet til hhv. vores frontend (vue) eller vores php-bagende, virker fortsat som en stor opgave 5 Är inde i udviklingen, og jeg tror at den nuvÊrende implementering fungerer sÄ godt, at der bliver lange udsigter til at bruge mere krudt pÄ det, bliver en ting - men nu mÄ vi se!

Umiddelbart sÄ har alle der indtil nu har bidraget eks ogsÄ kendt webapp'en godt nok til, at de ting, som Tolgee bibliotekerne ville tilbyde af ekstra krÊs, (eks. nem screenshot funktionalitet + tilfÞjelse af kontekst til nyoprettede keys + Cli Tool), ikke umiddelbart har vÊret nÞdvendig.

Ud af de smĂ„ 3300 keys, blev 800 keys udfyldt eller rettet pĂ„ vores Finske version den fĂžrste dag hvor Netvisor havde adgang (Shout out to Sami, for that! 🙏), Norge og Sverige, begge versioner var vĂŠsentlig bedre oversat til at starte med, fik hver et sted imellem 250 og 300 keys udfyldt/rettet til den fĂžrste dag ligesom der i demonstrationen af det hele ogsĂ„ blev reviewet omkring 1000 keys, der blot skulle verificeres af en native speaker.

Dokumentation

Her er ressourcerne jeg har brugt for at komme i mÄl, hvor du kan lÊse meget mere om de forskellige elementer:

Tolgee Documentation: Tolgee, Rest API Docs
"De andre": Localazy, Lokalise, Laravel Translations af Mohammed Ashraf

Fod note!

Tolgee's Open Source team har efter jeg delte artiklen rakt ud til mig, for at nĂŠvne, at deres open source version ikke lĂŠngere har unlimited seats som jeg ellers skrev, men at de nu tilbyder 10 gratis pladser, og har en ny prismodel dĂ©rfra. Det lovede jeg dem selvfĂžlgelig at lige gĂžre OBS pĂ„. Hele min erfering med projecktet og platformen har dog vĂŠret som det er berettet ovenfor, og at det er vigtigt for dem, at vĂŠre reprĂŠsenteret korrekt er vigtigere for dem, end en information, som ikke lĂŠngere er korrekt, men som ellers lyder bedre, synes jeg siger meget om hvad for en type virksomhed der er at tale om. 🙌 Yderligere sĂ„ lĂŠrte jeg, at skal Tolgee eks. bruges til et open source projekt, er de ogsĂ„ til at tale med ift deres prisplaner!

@mikkelrask
ComputernĂžrden. Hobby futurist, linux entusiast, hardware hacker og tinkerer og generelt kreativt legebarn. Bosat i KĂžbenhavns Nordvest kvarter med min hund Homie. Jeg har arbejdet med computere hele mit liv, og ser en deres kunnen som en naturlig udvidelse af min egen.
© mr@github:~$ █, Built with Gatsby and hosted on Github.