Localizing your app. Traps and pitfalls by Roman Imankulov

Localizing your app. Traps and pitfalls by Roman Imankulov

Localizing your app. Traps and pitfalls

A2c14a1c4e16aa337c7d36abe7d1cf8f?s=128

DevOpsPorto

August 08, 2019
Tweet

Transcript

  1. Localizing your app. 
 Traps and pitfalls Roman Imankulov

  2. About me • taking care of localizing todoist.com since 2012

  3. that’s how it looks like (18 languages in total)

  4. that’s how it looks like (18 languages in total)

  5. that’s how it looks like (18 languages in total)

  6. that’s how it looks like (18 languages in total)

  7. How to choose the language?

  8. Ask user!

  9. Get it from HTTP request

  10. Get it from the URL

  11. Get it from the URL

  12. Get it from the URL

  13. Confused search engines

  14. Use hreflang

  15. How translations are stored?

  16. None
  17. How to use them in the code?

  18. None
  19. Not touching the questions • How to seed translation files

    • How to extract strings from the code • How to work with translators • How to compile files • How to merge translations • etc…
  20. String interpolations

  21. Which one is correct?

  22. String interpolation 
 strikes back

  23. None
  24. Try pofilter from translate-toolkit

  25. Plural forms

  26. Naive approach

  27. Plurals are complicated in Russian

  28. Arabic plurals Source: http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html

  29. ngettext to the rescue

  30. ngettext to the rescue

  31. More issues

  32. Order of words in a sentence _(“%s assigned %s tasks

    to %s”) _(“{user1} assigned {n} tasks to {user2}”)
  33. Gender variations _(“%s completed a task”)

  34. String concatenations _(“Welcome to”) + website_name

  35. Missing context _(“May”) pgettext(“month name”, “May”) pgettext(“availability”, “May”)

  36. And many many more

  37. What can we realistically do? • Brace yourself and get

    ready for failures • Use linters, automated tests, etc • Explain to developers how different languages work • Explain to translators how localization in the app works • Make sure there’s a communication channel between developers and translators • Make sure there’s a feedback channel from users to translators and developers