After the success of LIFE Fasting Tracker (5 million+ lifetime downloads), LifeOmic decided to market apps to a broader audience, target Spanish speaking demographics and more langauges. I had the opportunity to lead our efforts to internationalize our apps and want to share my experience and takeaways in the process.
To start, what’s the app? At LifeOmic our main app was LIFE Fasting Tracker, the #2 Intermittent Fasting app on the App Store (Zero is in the #1 spot and is awesome, deservedly so). LIFE carved out a nice spot for itself as the #2 with tens of thousands of DAUs. Given its success and broad appeal in North America we decided to increase the potential user base by adding support for additional languages.
Being based in the US, Spanish was the obvious second language to support, but we didn’t stop there. At time of this blog post we support the following:
English
Spanish
French
Portuguese
German
Turkish
Arabic
Pretty awesome right? I’ve worked on a dozen+ different apps through my career so far, all of which aspired to become internationally friendly ✨someday✨ but we were able to do it! So without further ado, here’s some notes from the translation and internationalization processes, and some tips and tricks I picked up along the way.
Dev Process
Select a localization library (we used React Native with react-intl but theoretically this guide applies to all client app development)
Install and configure your i18n (short for internationalization) library
Isolate all user-facing strings in code to a single file/single source of truth (to prepare for translators)
Repeat for permissions-related strings (often in a plist or other location)
Translation Process
Working with a local translation expert and a network of translators, we found that the translation process took 1-2 months per language. Because our app included some scientific language, we took a little bit of more advanced approach, starting with a glossary of 20-30 key terms such as intermittent fasting, metabolism, fasting schedule, etc. After some detailed QA on the key terms we then moved into full translation of all strings. This was our rough timeline:
Glossary translation (2 weeks)
Glossary review (2 weeks)
Full translation (2 weeks)
Translation review (1 week)
App Store listing translation (1 week)
Internationalization Tips
Now getting to the good stuff, the dev tips. How do you make sure your app will actually perform well with variable length strings, perhaps new character sets (e.g. Japanese characters instead of Latin-based alphabets), and the infamous right-to-left languages (most notably Arabic and Hebrew)? The first piece of wisdom I can offer is to stop making assumptions. This a surefire way to get yourself in trouble and lead to clipped texted, overlapping, awkward UI, or some cases, crashes.
Do not assume the length of text fields (note that Germanic languages like Norweigian, Swedish, German, etc. can often use twice as many letters/words to communcate the same concepts in English)
Support auto-sizing and multi-line text fields whenever possible
Always prefer use of leading/trailing over left/right
Avoid use of caps, line breaks, abbreviation for styling - these don’t translate well
Avoid super tight spacing, prefer iOS and Android platform standards whenever possible
QA your work! Work with native speakers to proofread your translations - on paper and in app - and gather real world feedback
Summary
In summary, even if you don’t plan to internationlize your apps tomorrow, most of these suggestions are useful best practices that will help keep your code simple and streamlined. And when your product owner comes to you asking how much lift it’ll be to add support for a new language you can dazzle them with an effective and (mostly) painless solution.