SlideShare a Scribd company logo
Localizing iOS Apps

                                           Anthony Weiss
                                           weissazool.com
                                   anthony@weissazool.com

Friday, November 9, 12
Why localize?



Friday, November 9, 12
You make more money.



Friday, November 9, 12
Fixed cost of translation
                            vs.
                    Unlimited potential
                          upside

Friday, November 9, 12
Time investment:
                            Minimal.


Friday, November 9, 12
How to prepare your
                          app for localization:
                            NSLocalizedString(key, comment)




Friday, November 9, 12
labelExample.text =
  ! NSLocalizedString(@"NSLocalizedString() example",
  ! ! ! ! ! ! ! ! ! @"Translate 'example' only");


  if (papayas == 0) {
      papayaPlurality = NSLocalizedString(@"NoPapayas",
  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !     @"No papayas.");
      additionalComment = NSLocalizedString(@"How sad.",
  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! @"Regretfulness");
  }
  return [NSString stringWithFormat:
  ! ! ! ! NSLocalizedString(@"You have %d %@. %@",
  ! ! ! ! ! ! ! ! ! ! ! ! @"Papaya possession"),
  ! ! ! ! papayas, papayaPlurality, additionalComment];




Friday, November 9, 12
Comments can give
                          your translators
                             context.


Friday, November 9, 12
Everything’s in
                         NSLocalizedString().
                            Now what?
                           The genstrings command-line tool.




Friday, November 9, 12
What’s genstrings?
                     genstrings searches your code for macros related to
                          localization, including NSLocalizedString().




Friday, November 9, 12
genstrings en.lproj
                genstrings -o target-directory source-files
                genstrings -o target-directory other-source-files -a




Friday, November 9, 12
/* Translate 'example' only */
  "NSLocalizedString() example" =
  ! ! ! ! ! ! ! ! ! ! "NSLocalizedString() example";

  /* No papayas. */
  "NoPapayas" = "papayas";

  /* Regretfulness */
  "How sad." = "How sad.";

  /* Papaya possession */
  "You have %d %@. %@" = "You have %1$d %2$@. %3$@";




Friday, November 9, 12
/* Translate 'example' only */
  "NSLocalizedString() example" = "Ejemplo de
  ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! NSLocalizedString()";

  /* No papayas. */
  "NoPapayas" = "papayas";

  /* Regretfulness */
  "How sad." = "Que lástima. ";

  /* Papaya possession */
  "You have %d %@. %@" = "%3$@Usted tiene %1$d %2$@.";




Friday, November 9, 12
/* Papaya possession */
  "You have %d %@. %@" = "You have %1$d %2$@. %3$@";




  /* Papaya possession */
  "You have %d %@. %@" = "%3$@Usted tiene %1$d %2$@.";




Friday, November 9, 12
Friday, November 9, 12
How does
                 NSLocalizedString() work?
                         It’s dictionaries all the way down.




Friday, November 9, 12
NSLocalizedStringFrom
                    Table(key, table, comment)
                         Looks up your string in table.strings




Friday, November 9, 12
Adding localizations to
                        your project
                            Let’s localizing!




Friday, November 9, 12
Friday, November 9, 12
I’ve got images with
                         English text in them.


Friday, November 9, 12
en.lproj/aybabtu.png




Friday, November 9, 12
en.lproj/aybabtu.png
                                     ja.lproj/aybabtu.png




Friday, November 9, 12
en.lproj/aybabtu.png
                                                      ja.lproj/aybabtu.png




                         es.lproj/aybabtu.png
Friday, November 9, 12
Friday, November 9, 12
I like Interface Builder. I
                 don’t want to set my UI
                        text in code.


Friday, November 9, 12
ibtool
                ibtool --generate-strings-file MainStoryboard.strings
                    MainStoryboard.storyboard

                ibtool --generate-strings-file NibName.strings NibName.xib




Friday, November 9, 12
/* Class = "IBUILabel"; text = "This text has been
  laid out in the nib."; ObjectID = "3ZM-yV-HpI"; */
  "3ZM-yV-HpI.text" = "This text has been laid out
  ! ! ! ! ! ! ! ! ! ! ! in the nib.";

  /* Class = "IBUILabel"; text = "Just the way I
  like it!"; ObjectID = "Oxg-9T-bKW"; */
  "Oxg-9T-bKW.text" = "Just the way I like it!";




Friday, November 9, 12
ibtool --strings-file es.lproj/MainStoryboard.strings
                	

 	

 --write es.lproj/MainStoryboard.storyboard
                	

 	

 	

 	

 en.lproj/MainStoryboard.storyboard


                ibtool --strings-file target-language/NibName.strings
                       --write target-language/NibName.xib
                               base-language/NibName.xib




Friday, November 9, 12
Friday, November 9, 12
Friday, November 9, 12
Friday, November 9, 12
Money, revisited.



Friday, November 9, 12
• Cost of translation: ¥8,000
                     • Revenue per sale: ¥60
                     • Sell 8000/60 = 135 extra apps in that
                         language to break even.




Friday, November 9, 12
Localization gives you a
                  competitive advantage.
                   Which you need to leverage with sales and marketing.




Friday, November 9, 12
Additional Resources

                     •   https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/
                         LoadingResources/Strings/Strings.html

                     •   https://developer.apple.com/library/ios/#documentation/MacOSX/
                         Conceptual/BPInternational/Articles/LocalizingInterfaces.html

                     •   http://gengo.com/contact-support/quality-policy/

                     •   http://kb.applingua.com/2011/10/3rd-party-localization-string-extraction-
                         tools/




Friday, November 9, 12
WZLocalize

                           github.com/weissazool/WZLocalize



Friday, November 9, 12

More Related Content

PDF
Code@Six - Ruby 2.0
PPTX
Fair and Lovely (STP analysis)
PPTX
Jam presentation
PPTX
Making Jams, Jellies and Fruit Preserves
PPTX
PPT
Lux branding strategies
PPT
Cultivating Creativity in the Classroom
PPTX
Learn SoapUI
Code@Six - Ruby 2.0
Fair and Lovely (STP analysis)
Jam presentation
Making Jams, Jellies and Fruit Preserves
Lux branding strategies
Cultivating Creativity in the Classroom
Learn SoapUI

Viewers also liked (20)

PPT
Fairness cream
PPT
Lux final presentation group one
PPTX
Case study - Cultural norms, Fair & Lovely, and advertising
PDF
Creativity and innovation in the Classroom
PPT
Creative teacher
PPTX
Soap Project
PDF
Chemistry Investigatory Project (Class 12 ,CBSE)
PPT
Sony Marketing Plan Slide Show
PPTX
Marketing strategies of pepsi
DOCX
market research project on lux soaps
DOC
A project report on Chocolate
DOC
project report on chocolate
DOC
Project on shampoo
DOCX
Sony Marketing Mix
PPTX
Marketing Project on Pepsi Co.
PPTX
Sony ppt
PPTX
Project on biscuits,business studies project work, 12 class business project ...
PDF
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...
Fairness cream
Lux final presentation group one
Case study - Cultural norms, Fair & Lovely, and advertising
Creativity and innovation in the Classroom
Creative teacher
Soap Project
Chemistry Investigatory Project (Class 12 ,CBSE)
Sony Marketing Plan Slide Show
Marketing strategies of pepsi
market research project on lux soaps
A project report on Chocolate
project report on chocolate
Project on shampoo
Sony Marketing Mix
Marketing Project on Pepsi Co.
Sony ppt
Project on biscuits,business studies project work, 12 class business project ...
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...
Ad

Similar to Localizing iOS Apps (20)

KEY
iOS Localization
PDF
Beginning iOS App Localization
PDF
Localizing Mobile Apps
PDF
Localization and Accessibility on iOS
PDF
iOS localization
PDF
Mobile Warsaw - Efficient Localization for iOS Apps
PDF
Avoiding Pitfalls with Internationalization & Localization
PDF
Internationalizing Your Apps
PPTX
MVP Virtual Conference - Americas 2015 - Cross platform localization for mobi...
PDF
WordForge Localization Editor
PDF
WordForge Localization Editor
PDF
Translating Qt Applications
PDF
Localization Realization
PDF
Internationlization
PPT
Cultural Awareness, Localization and the Impact on Content Creation of User I...
PDF
Crossing the border with Qt: the i18n system
PDF
Best Practices for Software Localization
PPTX
Go Global Fearless(I18N & L10N)
PDF
iOs app localization / Yoni tsafir
PPTX
Developing Localization Ready Applications
iOS Localization
Beginning iOS App Localization
Localizing Mobile Apps
Localization and Accessibility on iOS
iOS localization
Mobile Warsaw - Efficient Localization for iOS Apps
Avoiding Pitfalls with Internationalization & Localization
Internationalizing Your Apps
MVP Virtual Conference - Americas 2015 - Cross platform localization for mobi...
WordForge Localization Editor
WordForge Localization Editor
Translating Qt Applications
Localization Realization
Internationlization
Cultural Awareness, Localization and the Impact on Content Creation of User I...
Crossing the border with Qt: the i18n system
Best Practices for Software Localization
Go Global Fearless(I18N & L10N)
iOs app localization / Yoni tsafir
Developing Localization Ready Applications
Ad

Recently uploaded (20)

PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Spectroscopy.pptx food analysis technology
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Electronic commerce courselecture one. Pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Cloud computing and distributed systems.
PDF
KodekX | Application Modernization Development
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Encapsulation theory and applications.pdf
PPT
Teaching material agriculture food technology
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Review of recent advances in non-invasive hemoglobin estimation
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Per capita expenditure prediction using model stacking based on satellite ima...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Spectral efficient network and resource selection model in 5G networks
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Spectroscopy.pptx food analysis technology
Network Security Unit 5.pdf for BCA BBA.
Mobile App Security Testing_ A Comprehensive Guide.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Electronic commerce courselecture one. Pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Cloud computing and distributed systems.
KodekX | Application Modernization Development
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Encapsulation theory and applications.pdf
Teaching material agriculture food technology
MIND Revenue Release Quarter 2 2025 Press Release
MYSQL Presentation for SQL database connectivity
Review of recent advances in non-invasive hemoglobin estimation

Localizing iOS Apps

  • 1. Localizing iOS Apps Anthony Weiss weissazool.com anthony@weissazool.com Friday, November 9, 12
  • 3. You make more money. Friday, November 9, 12
  • 4. Fixed cost of translation vs. Unlimited potential upside Friday, November 9, 12
  • 5. Time investment: Minimal. Friday, November 9, 12
  • 6. How to prepare your app for localization: NSLocalizedString(key, comment) Friday, November 9, 12
  • 7. labelExample.text = ! NSLocalizedString(@"NSLocalizedString() example", ! ! ! ! ! ! ! ! ! @"Translate 'example' only"); if (papayas == 0) { papayaPlurality = NSLocalizedString(@"NoPapayas", ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! @"No papayas."); additionalComment = NSLocalizedString(@"How sad.", ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! @"Regretfulness"); } return [NSString stringWithFormat: ! ! ! ! NSLocalizedString(@"You have %d %@. %@", ! ! ! ! ! ! ! ! ! ! ! ! @"Papaya possession"), ! ! ! ! papayas, papayaPlurality, additionalComment]; Friday, November 9, 12
  • 8. Comments can give your translators context. Friday, November 9, 12
  • 9. Everything’s in NSLocalizedString(). Now what? The genstrings command-line tool. Friday, November 9, 12
  • 10. What’s genstrings? genstrings searches your code for macros related to localization, including NSLocalizedString(). Friday, November 9, 12
  • 11. genstrings en.lproj genstrings -o target-directory source-files genstrings -o target-directory other-source-files -a Friday, November 9, 12
  • 12. /* Translate 'example' only */ "NSLocalizedString() example" = ! ! ! ! ! ! ! ! ! ! "NSLocalizedString() example"; /* No papayas. */ "NoPapayas" = "papayas"; /* Regretfulness */ "How sad." = "How sad."; /* Papaya possession */ "You have %d %@. %@" = "You have %1$d %2$@. %3$@"; Friday, November 9, 12
  • 13. /* Translate 'example' only */ "NSLocalizedString() example" = "Ejemplo de ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! NSLocalizedString()"; /* No papayas. */ "NoPapayas" = "papayas"; /* Regretfulness */ "How sad." = "Que lástima. "; /* Papaya possession */ "You have %d %@. %@" = "%3$@Usted tiene %1$d %2$@."; Friday, November 9, 12
  • 14. /* Papaya possession */ "You have %d %@. %@" = "You have %1$d %2$@. %3$@"; /* Papaya possession */ "You have %d %@. %@" = "%3$@Usted tiene %1$d %2$@."; Friday, November 9, 12
  • 16. How does NSLocalizedString() work? It’s dictionaries all the way down. Friday, November 9, 12
  • 17. NSLocalizedStringFrom Table(key, table, comment) Looks up your string in table.strings Friday, November 9, 12
  • 18. Adding localizations to your project Let’s localizing! Friday, November 9, 12
  • 20. I’ve got images with English text in them. Friday, November 9, 12
  • 22. en.lproj/aybabtu.png ja.lproj/aybabtu.png Friday, November 9, 12
  • 23. en.lproj/aybabtu.png ja.lproj/aybabtu.png es.lproj/aybabtu.png Friday, November 9, 12
  • 25. I like Interface Builder. I don’t want to set my UI text in code. Friday, November 9, 12
  • 26. ibtool ibtool --generate-strings-file MainStoryboard.strings MainStoryboard.storyboard ibtool --generate-strings-file NibName.strings NibName.xib Friday, November 9, 12
  • 27. /* Class = "IBUILabel"; text = "This text has been laid out in the nib."; ObjectID = "3ZM-yV-HpI"; */ "3ZM-yV-HpI.text" = "This text has been laid out ! ! ! ! ! ! ! ! ! ! ! in the nib."; /* Class = "IBUILabel"; text = "Just the way I like it!"; ObjectID = "Oxg-9T-bKW"; */ "Oxg-9T-bKW.text" = "Just the way I like it!"; Friday, November 9, 12
  • 28. ibtool --strings-file es.lproj/MainStoryboard.strings --write es.lproj/MainStoryboard.storyboard en.lproj/MainStoryboard.storyboard ibtool --strings-file target-language/NibName.strings --write target-language/NibName.xib base-language/NibName.xib Friday, November 9, 12
  • 33. • Cost of translation: ¥8,000 • Revenue per sale: ¥60 • Sell 8000/60 = 135 extra apps in that language to break even. Friday, November 9, 12
  • 34. Localization gives you a competitive advantage. Which you need to leverage with sales and marketing. Friday, November 9, 12
  • 35. Additional Resources • https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ LoadingResources/Strings/Strings.html • https://developer.apple.com/library/ios/#documentation/MacOSX/ Conceptual/BPInternational/Articles/LocalizingInterfaces.html • http://gengo.com/contact-support/quality-policy/ • http://kb.applingua.com/2011/10/3rd-party-localization-string-extraction- tools/ Friday, November 9, 12
  • 36. WZLocalize github.com/weissazool/WZLocalize Friday, November 9, 12