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

Fun with flags - Cómo enojar países con i18n

Fun with flags - Cómo enojar países con i18n

JSConf México 2026

Avatar for Eva Ferreira

Eva Ferreira

October 30, 2026

More Decks by Eva Ferreira

Other Decks in Programming

Transcript

  1. Esta es una charla sobre idiomas Se darán ejemplos en

    español, inglés y alemán @evaferreira92
  2. o e os V “Che” Cultura e d r a

    t r a Lleg s e l a i c o s s o t n e v e a
  3. Últimamente, usar la web como non-native English speaker es un

    horror. AI-generated crap-tions, traducciones no solicitadas, errores gramaticales… @evaferreira92
  4. ¿Por qué es tan difícil? • Los idiomas son muy

    complejos • Los idiomas son cultura
  5. Arreglando el alemán • Configurá el idioma en HTML con

    el atributo lang • Nunca fijes los anchos  Usa paddings body { hyphens: auto; }
  6. La AI llegó a acelerar Los procesos buenos ahora son

    buenos y rápidos. Los procesos malos ahora son peores, más rápido.
  7. 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?
  8. De contexto a lenguaje • Tiempo y calendario • Unidades

    de medidas • Geografía y orientación @evaferreira92
  9. ICU MessageFormat / i18next • Interpolación • Plurales • Formatos

     Fechas y números • Selects / Context  “Condicionales”, se pueden usar para gender @evaferreira92
  10. TMS • Llegan las nuevas keys Se traducen Usando Translation

    memory y screenshots Se verifica la traducción Glossary Se shippean CI/CD integration @evaferreira92
  11. Lexemas & morfemas • 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. 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} にログインしました
  21. Shipping strategies • Posponer la feature No shippear en japonés

    • Posponer translation Shippear en inglés • Provisional translation Shippear con Machine Translation @evaferreira92
  22. Provisional translations • No es copiar y pegar en Google

    Translate • Es hacerlo en el Pull Request, junto al coding agent • Deben ser revisadas posteriormente • Tenes que darle contexto a los traductores @evaferreira92
  23. Provisional guidelines • Tener un buen common.json  Evita que

    se creen 50 keys de “Save” • UX writing guidelines en el repositorio  Formality level  You vs. We  Glossary  Do not translate list  Namespaces de alto riesgo (billing.json) @evaferreira92
  24. Tipos de coverage • % de user flow • %

    del status de traducción • % hardcoded, literal strings @evaferreira92
  25. Recap • I18n no es solo traducir strings  Los

    idiomas son cultura y son políticos • El inglés como idioma base nos destinó a muchos problemas de falta de contexto • Nunca armés oraciones en el código, usá más keys • Lo determinístico bloquea, lo estimado solo puede mejorar