SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
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

Más contenido relacionado

Destacado

Lux final presentation group one
Lux final presentation group oneLux final presentation group one
Lux final presentation group oneDivyanshu Mishra
 
Case study - Cultural norms, Fair & Lovely, and advertising
Case study - Cultural norms, Fair & Lovely, and advertisingCase study - Cultural norms, Fair & Lovely, and advertising
Case study - Cultural norms, Fair & Lovely, and advertisingAn Tran
 
Creativity and innovation in the Classroom
Creativity and innovation in the ClassroomCreativity and innovation in the Classroom
Creativity and innovation in the ClassroomChris Betcher
 
Creative teacher
Creative teacherCreative teacher
Creative teacherNawal Ali
 
Soap Project
Soap ProjectSoap Project
Soap Projectsamara4
 
Sony Marketing Plan Slide Show
Sony Marketing Plan Slide ShowSony Marketing Plan Slide Show
Sony Marketing Plan Slide ShowStephen Giusti
 
Marketing strategies of pepsi
Marketing strategies of pepsiMarketing strategies of pepsi
Marketing strategies of pepsiRaja Ali
 
market research project on lux soaps
market research project on lux soapsmarket research project on lux soaps
market research project on lux soapsRohit Kumar
 
A project report on Chocolate
A project report on ChocolateA project report on Chocolate
A project report on ChocolateAnjali Singh
 
project report on chocolate
project report on chocolate project report on chocolate
project report on chocolate saurabh2somu
 
Project on shampoo
Project on shampooProject on shampoo
Project on shampooaditya10000
 
Marketing Project on Pepsi Co.
Marketing Project on Pepsi Co.Marketing Project on Pepsi Co.
Marketing Project on Pepsi Co.Wajid Ali
 
Project on biscuits,business studies project work, 12 class business project ...
Project on biscuits,business studies project work, 12 class business project ...Project on biscuits,business studies project work, 12 class business project ...
Project on biscuits,business studies project work, 12 class business project ...Ravi Singh
 
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...Dan John
 

Destacado (20)

Fairness cream
Fairness creamFairness cream
Fairness cream
 
Lux final presentation group one
Lux final presentation group oneLux final presentation group one
Lux final presentation group one
 
Case study - Cultural norms, Fair & Lovely, and advertising
Case study - Cultural norms, Fair & Lovely, and advertisingCase study - Cultural norms, Fair & Lovely, and advertising
Case study - Cultural norms, Fair & Lovely, and advertising
 
Creativity and innovation in the Classroom
Creativity and innovation in the ClassroomCreativity and innovation in the Classroom
Creativity and innovation in the Classroom
 
Creative teacher
Creative teacherCreative teacher
Creative teacher
 
Project on fair&lovely
Project on fair&lovelyProject on fair&lovely
Project on fair&lovely
 
Soap Project
Soap ProjectSoap Project
Soap Project
 
Chemistry Investigatory Project (Class 12 ,CBSE)
Chemistry Investigatory Project (Class 12 ,CBSE)  Chemistry Investigatory Project (Class 12 ,CBSE)
Chemistry Investigatory Project (Class 12 ,CBSE)
 
Sony Marketing Plan Slide Show
Sony Marketing Plan Slide ShowSony Marketing Plan Slide Show
Sony Marketing Plan Slide Show
 
sony
sonysony
sony
 
Marketing strategies of pepsi
Marketing strategies of pepsiMarketing strategies of pepsi
Marketing strategies of pepsi
 
market research project on lux soaps
market research project on lux soapsmarket research project on lux soaps
market research project on lux soaps
 
A project report on Chocolate
A project report on ChocolateA project report on Chocolate
A project report on Chocolate
 
project report on chocolate
project report on chocolate project report on chocolate
project report on chocolate
 
Project on shampoo
Project on shampooProject on shampoo
Project on shampoo
 
Sony Marketing Mix
Sony Marketing MixSony Marketing Mix
Sony Marketing Mix
 
Marketing Project on Pepsi Co.
Marketing Project on Pepsi Co.Marketing Project on Pepsi Co.
Marketing Project on Pepsi Co.
 
Sony ppt
Sony pptSony ppt
Sony ppt
 
Project on biscuits,business studies project work, 12 class business project ...
Project on biscuits,business studies project work, 12 class business project ...Project on biscuits,business studies project work, 12 class business project ...
Project on biscuits,business studies project work, 12 class business project ...
 
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...
Solved Cbse Class 12 Accountancy Full Project(Comprehensive Project, Ratio An...
 

Similar a Localize iOS Apps for New Markets & Revenue

Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5C4Media
 
JS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-onJS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-onBrice Argenson
 
De vuelta al pasado con SQL y stored procedures
De vuelta al pasado con SQL y stored proceduresDe vuelta al pasado con SQL y stored procedures
De vuelta al pasado con SQL y stored proceduresNorman Clarke
 
Maximiliano Firtman
Maximiliano FirtmanMaximiliano Firtman
Maximiliano FirtmanColombia3.0
 
Modern HTML & CSS Coding: Speed, Semantics & Structure
Modern HTML & CSS Coding: Speed, Semantics & StructureModern HTML & CSS Coding: Speed, Semantics & Structure
Modern HTML & CSS Coding: Speed, Semantics & StructureRaven Tools
 
Adapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the futureAdapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the futureChris Mills
 
Tackling Big Data with Hadoop
Tackling Big Data with HadoopTackling Big Data with Hadoop
Tackling Big Data with Hadooppoorlytrainedape
 
Enterprise javascriptsession2
Enterprise javascriptsession2Enterprise javascriptsession2
Enterprise javascriptsession2Troy Miles
 
Educause - Building a Responsive Website for the Presidential Debate
Educause - Building a Responsive Website for the Presidential DebateEducause - Building a Responsive Website for the Presidential Debate
Educause - Building a Responsive Website for the Presidential DebateJon Liu
 
MongoTalk/Voyage
MongoTalk/VoyageMongoTalk/Voyage
MongoTalk/VoyageESUG
 
Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)benwaine
 
5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) Code5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) CodeJeremy Kendall
 
Fast & Furious: Speed in the Opera browser
Fast & Furious: Speed in the Opera browserFast & Furious: Speed in the Opera browser
Fast & Furious: Speed in the Opera browserAndreas Bovens
 
Building Sencha Themes
Building Sencha ThemesBuilding Sencha Themes
Building Sencha ThemesSencha
 
Deconstructing Functional Programming
Deconstructing Functional ProgrammingDeconstructing Functional Programming
Deconstructing Functional ProgrammingC4Media
 
Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Marcel Caraciolo
 
JS-Everywhere - SSE Hands-on
JS-Everywhere - SSE Hands-onJS-Everywhere - SSE Hands-on
JS-Everywhere - SSE Hands-onBrice Argenson
 
Breaking the Mobile Web with HTML5
Breaking the Mobile Web with HTML5 Breaking the Mobile Web with HTML5
Breaking the Mobile Web with HTML5 Maximiliano Firtman
 

Similar a Localize iOS Apps for New Markets & Revenue (20)

Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5Multiplatform, Promises and HTML5
Multiplatform, Promises and HTML5
 
JS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-onJS-Everywhere - LocalStorage Hands-on
JS-Everywhere - LocalStorage Hands-on
 
De vuelta al pasado con SQL y stored procedures
De vuelta al pasado con SQL y stored proceduresDe vuelta al pasado con SQL y stored procedures
De vuelta al pasado con SQL y stored procedures
 
Maximiliano Firtman
Maximiliano FirtmanMaximiliano Firtman
Maximiliano Firtman
 
Modern HTML & CSS Coding: Speed, Semantics & Structure
Modern HTML & CSS Coding: Speed, Semantics & StructureModern HTML & CSS Coding: Speed, Semantics & Structure
Modern HTML & CSS Coding: Speed, Semantics & Structure
 
Adapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the futureAdapt and respond: keeping responsive into the future
Adapt and respond: keeping responsive into the future
 
Makers Go Pro
Makers Go ProMakers Go Pro
Makers Go Pro
 
Tackling Big Data with Hadoop
Tackling Big Data with HadoopTackling Big Data with Hadoop
Tackling Big Data with Hadoop
 
Enterprise javascriptsession2
Enterprise javascriptsession2Enterprise javascriptsession2
Enterprise javascriptsession2
 
Educause - Building a Responsive Website for the Presidential Debate
Educause - Building a Responsive Website for the Presidential DebateEducause - Building a Responsive Website for the Presidential Debate
Educause - Building a Responsive Website for the Presidential Debate
 
Immutability
ImmutabilityImmutability
Immutability
 
MongoTalk/Voyage
MongoTalk/VoyageMongoTalk/Voyage
MongoTalk/Voyage
 
Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)Acceptance & Integration Testing With Behat (PHPNw2011)
Acceptance & Integration Testing With Behat (PHPNw2011)
 
5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) Code5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) Code
 
Fast & Furious: Speed in the Opera browser
Fast & Furious: Speed in the Opera browserFast & Furious: Speed in the Opera browser
Fast & Furious: Speed in the Opera browser
 
Building Sencha Themes
Building Sencha ThemesBuilding Sencha Themes
Building Sencha Themes
 
Deconstructing Functional Programming
Deconstructing Functional ProgrammingDeconstructing Functional Programming
Deconstructing Functional Programming
 
Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)Recommender Systems with Ruby (adding machine learning, statistics, etc)
Recommender Systems with Ruby (adding machine learning, statistics, etc)
 
JS-Everywhere - SSE Hands-on
JS-Everywhere - SSE Hands-onJS-Everywhere - SSE Hands-on
JS-Everywhere - SSE Hands-on
 
Breaking the Mobile Web with HTML5
Breaking the Mobile Web with HTML5 Breaking the Mobile Web with HTML5
Breaking the Mobile Web with HTML5
 

Último

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Último (20)

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 

Localize iOS Apps for New Markets & Revenue

  • 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