Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fun with Flags - i18n in the AI era

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Eva Ferreira Eva Ferreira
September 08, 2026

Fun with Flags - i18n in the AI era

Smashing conference Freiburg 2026

Avatar for Eva Ferreira

Eva Ferreira

September 08, 2026

More Decks by Eva Ferreira

Other Decks in Programming

Transcript

  1. o e os “Che” V Culture t a l g

    n i Be s t n e v e l a i c o s r o f e
  2. Lately, using the web as a non-native English speaker sucks.

    AI generated crap-tions, unrequired translations, weird grammar… @evaferreira92
  3. Fix German overflow • Do not fix widths  Use

    paddings instead body { hyphens: auto; } @evaferreira92
  4. AI is here to accelerate Good processes are now ok

    and faster. Bad processes are now worse and more and faster.
  5. Un-offending people with i18n 1. The why? Culture 2. The

    how? Technique 3. The funcó? Quality @evaferreira92
  6. Heladera refrigerador nevera frigorífico frutilla fresa palta aguacate porotos frijoles

    judías habichuelas pochoclo palomitas cotufas pororó choclo elote batata camote boniato papa patata ananá piña durazno melocotón banana plátano guineo cambur jugo zumo auto carro coche colectivo camión autobús guagua micro subte metro vereda banqueta acera canilla llave grifo sándwich sánguche estacionamiento aparcamiento parqueadero estacionar aparcar parquear manejar conducir valija maleta computadora ordenador computador celular móvil anteojos lentes gafas lapicera birome pluma bolígrafo lapicero remera playera camiseta polera campera chamarra chaqueta casaca zapatillas tenis deportivas championes pileta alberca piscina sorbete popote pajita pitillo pajilla torta pastel tarta queque sándwich sánguche bocadillo emparedado caramelo golosina dulce chuchería chuches departamento piso apartamento canilla llave grifo regadera ducha inodoro excusado váter sanitario pollera falda pibe chico chavo chaval laburo chamba curro pega changa cachuelo plata lana pasta lucas coger agarrar tomar plata lana pasta ¿Qué es el español?
  7. From context to language • Time and calendar • Units

    of measurement • Geography and coordinates @evaferreira92
  8. ICU MessageFormat / i18next • Interpolation • Plurals • Formats

     Dates and numbers • Selects / Context  "Conditionals" can be used for gender @evaferreira92
  9. TMS • New keys arrive They get translated Translation memory

    and screenshots They get reviewed Glossary They get shipped CI/CD integration @evaferreira92
  10. Typology of languages De tode nuestra problemos de i18n, el

    razón. Von alle unsere Problemens der i18n, das Grund. Of all of our i18n's problem, the reasons.
  11. Lexeme & morpheme • Español: Perr-o-s / Perr-a-s • English:

    Dog-s • Deutsch: Hund-e / Hünd-in-nen der Hund / den Hund / dem Hund / des Hund-es die Hund-e / die Hund-e / den Hund-e-n / der Hund-e
  12. Verb conjugation English I speak You speak You speak You

    speak We speak They speak @evaferreira92 Spanish
  13. Verb conjugation English Spanish I speak Yo hablo You speak

    Vos hablás You speak Tu hablas You speak Usted habla We speak Nosotros hablamos They speak Ellos hablan @evaferreira92
  14. "The {itemType} was shared." El video fue compartido La foto

    fue compartida El archivo fue compartido
  15. The itemType was shared "the": "The" "wasShared": "was shared." "photo":

    "photo" "video": "video t('common.the') + t('entity.?') + t('common.wasShared')
  16. The itemType was shared "shared": "{itemType} was shared.“ "photo": “The

    photo“ "video": “The video" t('shared’, {entityType}')
  17. The itemType was shared "shared": "Se compartió: {itemType}", "shared_f": "La

    {itemType} fue compartida.", "shared_m": "El {itemType} fue compartido." t('item.shared', { context: genderOf(itemType), itemType })
  18. The itemType was shared "shared_photo": "The photo was shared." "shared_video":

    "The video was shared." t('shared’, {entityType}')
  19. Syntactic typology • SVO • SOV Japanese, Korean, Hindi, Turkish

    “The cat the mouse chased” @evaferreira92
  20. SVO • Rigid  The dog bit the man 

    The man bit the dog (failed OVS) • Flexible  El perro mordió al hombre  Al hombre lo mordió el perro (OVS) @evaferreira92
  21. t('logged_in') + service_name You just logged into {service_name} Acabas de

    iniciar sesión en {service_name} Du hast dich gerade angemeldet bei {service_name} Du hast dich gerade bei {service_name} angemeldet ログインしました {service_name} {service_name} にログインしました
  22. Shipping strategies • Defer feature Do not ship for Japanese

    customers • Defer translation Ship in English • Provisional translation Ship with Machine Translation @evaferreira92
  23. Provisional doesn’t mean careless. We need guardrails to get a

    good machine translation. @evaferreira92
  24. Provisional translations • It's not copying and pasting into Google

    Translate. • It must be done as part of the Pull Request, working alongisde your coding agent. • They must be reviewed afterwards. • You must give translators context. @evaferreira92
  25. Provisional guidelines • Good baseline on common.json  Prevents 50

    "Save" keys from being created • UX writing guidelines in the repository  Formality level  You vs. We  Glossary  Do not translate list  High-risk namespaces (billing.json) @evaferreira92
  26. CI/CD Checks • Sentence assembly companyName + " " +

    t("list.dashboard") t("list.dashboard", {companyName}) @evaferreira92
  27. Types of coverage • % of an specific user Flow

    • % translation’ status • % hardcoded, literal strings @evaferreira92
  28. Recap • I18n is not just translating strings • English

    destined us to many issues due to its weak morphology • Never concatenate sentences, use flexible keys • Checks and review processes are your friends