iOS App Localization
Insights From A Real World Example
ABOUT ME
@theyonibomber
yoni@joytunes.com
ABOUT SIMPLY PIANO
• Realtime feedback, works with
any piano or keyboard
• Trusted by millions of piano
learners in over 100 countries.
Localized to 11 languages.
• #1 on product hunt (> 1000
upvotes)
• 5-stars average star ratings
GLOSSARY
• Internationalization (i18n) - the process of
designing and building an application to
facilitate localization
• Localization (L10n) - the cultural and
linguistic adaptation of an internationalized
application
WHY LOCALIZE?
• Leverage your KPIs with non-US markets.
• A prerequisite for being featured on App Store globally.
https://www.appannie.com/insights/market-data/q3-2016-index-china-hits-ios-app-store-milestone/
WHY LOCALIZE - OUR STATS
• Featured in Front Page
of App Store in 9
countries
• Top grossing education
app in China
• 30% => 50% of revenue
from non-English
speaking countries
WHY NOT LOCALIZE?
• Cost of internationalization
• Cost of translation
• Cost of culturalization
• A new dimension on the testing matrix

(DEVICE x OS x LANG)
• Not a 1-time cost: new features / releases
https://www.flickr.com/photos/pictures-of-money/171219239
• Open Source - https://github.com/joytunes/JTLocalize
• Aims to solve common pains in built-in mechanism
• JTLocalizedString instead of NSLocalizedString in code
• JTLabel, JTButton, JTTextField, … in storyboards
• A set of python scripts
• Single Localizable.strings file without duplicates
Code
StoryboardStoryboardStoryboardStoryboard
Localizable.strings
• Easy workflow for localizing a new version / feature
prepare_diff
.strings file with
only new strings
Translation
localized diffmerge
• Update strings from server
• Misc. capabilities: chicken test, word_count,
change locale on runtime, …
LAYOUT BUGS
• Avoid relying on label’s
intrinsic content size for
other views’ constraints
LAYOUT BUGS
• Avoid fixed font size and making assumptions on text length.
• Apart from setting scale factor, and not “Word Wrap”, use
numberOfLines = 0 and a height constraint.
LAYOUT BUGS
• No way in Auto Layout to set constraints on font sizes of labels.
• Enumerate on font sizes using String’s boundingRectWithSize
on the longest string per language.
LOCALIZING VIDEOS
• Subtitles embedded in QuickTime instead of different video
per language
• Presented in WWDC '13 session 608, 

otherwise undocumented
• Use ffmpeg for embedding translated srt files to video
• Problem: ISO639-2 has no separation to Simplified vs.
Traditional Chinese (zh-Hans vs. zh-Hant)
LOCALIZING VIDEOS -
NARRATION
• QuickTime supports multiple audio tracks
• Couldn’t get it to work with ffmpeg
• File size impact would be substantial
• Ended up muting sound and using a
separate AVAudioPlayer
• Fiverr
LOCALIZING VIDEOS
DEMO
CULTURALIZATION

(IN OUR CASE)
• Note names vs. Chord
names
• Song names

(Lightly Row / Little Yonatan)
• Locale based songs
• Don’t forget England and
Australia 

(Quarter vs. Crotchet, …)
Вопросов?
?‫שאלות‬
Questions?
问题?
問題?¿Preguntas?
Les questions?
質問?
질문이 있으십니까?
?‫ֿראגן‬‫פ‬
Domande?
‫أسئلة؟‬
Fragen?
@theyonibomber
yoni@joytunes.com

iOs app localization / Yoni tsafir