localization realization
DESCRIPTION
Most of us know the drill - write the app, crank out the code and localize later. Thinking about localizing your iOS app up front will save you tons of time later. I'll also talk about a great project that can help you put translation into the hands of your users.TRANSCRIPT
Localization Realization
Aaron Douglas @astralbodies
Who am I?
• Aaron Douglas
• Red Arrow Labs in Milwaukee
• Mobile (iOS & Android) & Enterprise Java Developer
Internationalization vs Localization
• i18n vs L10n
• i18n = adapting to work everywhere
• L10n = additional features for a specific locale
What Is the Point?
• Language
• Culture
• Conventions
• Legal
Sounds hard.
• It can be difficult
• It’s not as easy as translate.google.com
• It can pay off big
Why Localize?
• Opens up markets for your product(s)
• Apple gives “free” insertion into localized App Stores
• Greater income
• Your power users = your translators
When do I start?
• From day one
• Existing application
What do I localize?
• Strings
• Numbers
• Dates
• Images
• Layouts
NSLocale
NSLocale
• Encapsulates a lot of information
• Language
• Cultural conventions
• Dates
• Numbers
Different Locales
• System Locale
• Current Locale
• NSCurrentLocaleDidChangeNotification
Strings
Strings
• NSLocalizedString
• XIB/NIB/Storyboards
• Localizable.strings
• lproj folders
• UTF-16 files
/* All-day switch label */ "All-day" = "All-day";
cell.textLabel.text = NSLocalizedString(@"All-day", @"All-day switch label");
Keys, Values and Comments
genstrings & ibtool
find . -name \*.m | xargs genstrings -o en.lproj/
ibtool --generate-strings-file MainMenu.strings MainMenu.xib
ibtool --strings-file MainMenu.strings --write ../French.lproj/MainMenu.xib
MainMenu.xib
Looks can be deceiving
• Keys are unique to each strings file
• Don’t overload!
• UTF-16 plays hell with email
• Use the comments properly
• Positional parameters
Comparing & Sorting
• A a B b C c D d = English
• a, A, b, B, c, C, ä, Ä = Swedish
• Called collation
• -compare: is wrong
• Use -localizedStandardCompare:
Validation
• Your validation logic may be locale-dependent
• Postal codes
• Regular Expressions
Debugging
NSDictionary *defaults = @{ @"NSShowNonLocalizableStrings": @(YES), @"NSShowNonLocalizedStrings": @(YES)}; ![[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; ![[NSUserDefaults standardUserDefaults] synchronize];
Numbers
NSNumberFormatter
• +localizedStringFromNumber:numberStyle:
• Styles: General, Currency, Percentage, Scientific, Spell-Out
Examples
• @45678.90
• General: 45,678.90
• Currency: $45,678.90
• Percentage: 4,567,890%
• Scientific: 4.56789E+04
• Spell-Out: Forty five thousand six ...
Locale Specific Formats
• 45 678,90
• ¥456.78
Number Tips
• Avoid intValue
• Use NSNumberFormatter
• Unit conversion is important
Dates
Dates
• One of the most messed up concepts
• NSDate is a wrapped NSTimeInterval
• Simply a point in time
Why Are Dates Hard?
• Time Zones
• Leap Years
• Leap Seconds
• Date Math
• Calendar Conversion
Calendars
• Gregorian
• Islamic
• Hindu
• Hebrew
• and on and on
Don’t Assume
• Date formats / Input masks
• Length of days/weeks/months
• Gregorian
• Location hasn’t changed since launch (timezones!)
Do Assume
• API calls with date formats
• Internally stored dates
• NSDate has no timezone
Images
Images
• Use Core Graphics to draw text
• No text on launch images
• Keep cultural references in mind
Cultural Images
Layouts
Layouts
• Words can be different lengths in another language
• Mac OS X has autolayouts
• iOS may “some day” have autolayout
• [UIBarButtonItem possibleTitles]
ibtool
• Separate NIBs for each locale
• Don’t make layout changes in locale-specific NIB!
• Programmatically move items
• Wait until iOS 6...
Translation
Process
• Collect Strings files/resources
• Send to translators
• Incorporate new strings
• Test, test, test, test!
translate.google.com
Greenwich
Greenwich
• Mac & iOS Apps!
• iOS requires a Mac & Bonjour
• http://github.com/fadingred/Greenwich
Services
• gengo - http://gengo.com
• Applingua - http://applingua.com
• Amazon Mechanical Turk
Resources
Apple Developer Library
• Internationalization Programming Topics
• International Mountains (Sample Code)
WWDC Videos
• 2011 - 131 - Getting Your Apps Ready for China and Other Hot Markets
• 2012 - 244 - Internationalization Tips and Tricks
Demo
Questions?