Under the Radar

Under the Radar 41: Internationalization


  welcome to under the radar a show about

  independent iOS app development I'm

  Marco Arment and I'm David Smith under

  the radar is never longer than 30

  minutes so let's get started so today we

  wanted to dive into the topic of

  localization or as some people call it

  internationalization and some people

  think those are different I don't really

  know I just call it all localization and

  networks for me but more generally we're

  talking about the concept of taking your

  application and making it having its

  appearance and its strings in the things

  in it be adaptive based on where in the

  world your user is and what language

  they're speaking and being adaptive in

  those kinds of ways and generally this

  is kind of one of those things that I

  feel like it's a lot of times viewed as

  kind of like a hygiene vague like

  consensus it's this thing that you maybe

  you think you should do but often you

  don't for a long time I had none of my

  applications localized at all and it was

  always this thing that I'd go to the

  session at WDC and kind of feel bad

  about myself and say oh yes here I'll do

  it and then go back and I wouldn't

  actually do it and I think it's a tricky

  one because unless you live in a multi

  lingual or international life yes where

  if you have speak two languages at home

  or you live abroad from where your

  native language is or something like

  that it's not something that you would

  necessarily come across and you know in

  your day to day life and it's always

  hard I think to write features for an

  application that you yourself won't

  benefit from I mean using it you know so

  when I make my app have you know just

  have display all of its you know strings

  in German that's great

  but I don't speak German so I have no

  idea if a if they're right and we'll get

  into a bit later and be like I don't

  feel that benefit and so I hope to do it

  and I'll certainly say it's it's a bit

  of a pain to do because if you want to

  do this you have to structure a lot of

  the visual components of your

  application very differently you have to

  make things very flexible you can't hard

  code a lot of values everything has to

  be able to be switched in an

  and adaptable depending on what language

  and locale your app is being used but

  one day I bit the bullet and in the

  first app I ever localized was pedometer

  plus plus and I localized it and had a

  pretty impactful change as a result like

  I found that the my downloads outside of

  english-speaking countries you know so

  outside of the United States Great

  Britain Australia New Zealand Canada

  candidate with an asterisk obviously

  they speak French there too but they buy

  an outside of those countries I found

  that my downloads went up by about three

  times Wow and overall that meant like

  obviously that meant that my overall

  sales didn't go up by three times

  because most of my sales were still

  coming from english-speaking countries

  but overall my sales did go up and I

  think we're gonna have to buy about more

  like 50% which was encouraging and the

  effort it took to get there has you know

  certainly it's debatable overall whether

  it was the right trade-off but I think

  in general it taught me the lesson that

  there is an impact this and it is

  something that we at least all need to

  consider because I've also had the

  flipside where I've localized some of my

  other applications and I've had

  essentially no increase and so it's not

  like a silver bullet it's not like if

  you localize your app your sales will go

  up three times like that's definitely

  not the case I've had the experience I

  had in pedometer plus plus was by far

  the best I've had but it's also you know

  it's somewhat distinct from some of my

  other experiences have you ever

  localized any of your applications

  um I mean basically the answer is no but

  I've I like I've been I've been near

  internationalization efforts before with

  in past jobs and so I kind of know

  what's involved and I I know I I too

  have gone every year to the WC sessions

  about localization and and I to have sat

  there feeling bad about myself thinking

  why don't I just do this already let's

  just do it you know but it's as you

  mentioned it is it is not easy to do and

  one of the biggest questions in my mind

  and which I hear people ask me all the

  time is will this actually increase

  sales and by how much and as you know

  like a big increase for you

  in non-english speaking countries that's

  that's great however it's hard to know

  as you said like it's hard to know

  whether that will apply to my app or not

  and it's hard to know how the how big

  that increase will be and then whether

  it'll be worth the costs but you know to

  me I kind of I kind of see

  internationalization and localization I

  also don't know the difference I know

  there is one and people will get mad at

  us for not knowing it but I don't know

  what it is I see them too as kind of a

  code hygiene thing and it's kind of

  similar to accessibility in some ways

  where if you make an interface

  accessible via the iOS accessibility

  mechanisms for things like voice-over

  and other assistive technologies it

  takes sometimes it takes a little bit

  more work in the coding and design stage

  but it usually isn't that much more work

  to make it possible and and to make it

  to do it well usually it's it's actually

  very little work because apple's stuff

  is so good you just kind of have to be

  aware of it as you're coding and there

  are certain aspects of

  internationalization that are that easy

  things like date formatting and stuff

  like that like number format and

  currency formatting in in those kind of

  areas Apple provides really easy api's

  date formatter is no but you know like

  that kind of stuff that if you just use

  them correctly at all then you will just

  get nicely formatted things your your

  strings won't be automatically

  translated to different languages but

  things like displaying numbers and

  things like that that will be that's

  very easy to get right and to have kind

  of done for you automatically

  in overcast I make extensive use of that

  kind of thing and for the strings I do

  wrap all of my UI strings in NS

  localized string because this macro that

  you could you know look up NS localized

  string if you don't know what it is you

  should be using it III do that for kind

  of preparation for potential future

  internationalization efforts so that

  it's easy to it's easy to see all my UI

  strings and easy to easy to pull them

  out and have them automatically

  translated or have them translated in

  automated kind of way if I ever need

  that but I don't actually do that I

  haven't actually translated it so I have

  and I have a few instances where I'm

  kind of abusing the formatters like you

  my in my list of episodes I am it the

  year from the date of from an episodes

  release date if it's the current year

  because I think that's just a nice

  little thing to get a little bit less

  clutter like if your episode was

  released on August 1st and that was two

  weeks ago I don't need to know that it

  was 2016 like because I already know

  it's 2016 thank you and this this works

  there is no built-in function that I

  know of to do this very well so I do

  kind of a hack which is I get the

  localized version of the current year

  and just remove that substring from the

  date string and this turned out to be a

  really dumb implementation because in

  certain countries there's a key where it

  was I think it was it might have been in

  a Portuguese speaking country or a

  Spanish speaking country but there was

  something where I got an email from user

  saying this is kind of weird-looking

  because there's like there's a word

  between the the day and/or the month and

  the year

  either way it's formatted where it's

  like it's like of or the so it's like

  you know July of 2016 you know whatever

  the translate version of that is and so

  in my version of this it just says you

  know 16th July of that's not great no

  it's not great so I have to probably

  revisit this this strategy but for the

  most part everything else has been has

  been done only in the ways of like using

  the built-in formatters for numbers and

  dates and currencies and things but not

  actually translating the strings but

  making it easy to do so in the future if

  I want to yeah and I think the approach

  you're taking is certainly the one that

  is at the very least the right approach

  that making in a as you're going as

  you're building an app being aware that

  this might be something you want to do

  later I think will certainly increase

  the likelihood that one day you will

  actually get to it rather than hitting

  the point where it's like okay I need to

  know like search in my app for every

  string that is being displayed and then

  we're you know add the NS localized

  string macro to it or I need to now go

  and you know do all this to switch

  everything over to using formatters and

  I said now in iOS 10 I think there's the

  new units for matters which are even

  like take this even farther that you can


  it's not even just dates and currency

  that you can do in numbers I think you

  could you know for you can even do

  clever things about speeds or distances

  so like I run into this with a couple my

  workout apps where you know it's how far

  did you run and right now I do some

  things like where I need to be clever

  about which unit to use and have options

  in the application for switching that

  you know I first launched I'll see what

  country you're in and I assume that if

  you're not in the United States you're

  probably gonna use metric units which in

  general I think is pretty much the case

  and do I should I do that I do this

  which is manually and then you know I

  was ten I can do this automatically but

  by and large it seems like an in general

  a good idea to keep this is something

  that it's part of building an app

  properly and just like you were saying

  with accessibility like if you build an

  app to do this you're probably all

  ultimately also going to be a better app

  because you're being thoughtful about

  what you're displaying to your user at a

  different level you know sometimes I run

  into situations where I'm just being

  lazy and so I'll add some words of

  explanation for something like and in

  that case it's probably symptomatic of

  my app actually being too confusing and

  not obvious enough about how to operate

  it if I have just a build instructions

  into it and if you're in a localization

  mindset there's a cost to adding that

  string because now that gets added to

  your list of things that you need to

  translate and have localized and so it's

  in some ways that it helps you think

  about your application in a in a

  constructive way to make sure that you

  know if you couldn't read anything in

  this application could you still use it

  and if you can that's probably a good

  indication that even if you can read the

  the strings and the labels and things in

  your application you know it's it's

  still going to be a good experience

  um but by and large it's funny things I

  think doing localizing just to have more

  downloads is I think a good reason and I

  think in general for most people there

  is going to be some it's very unlikely

  that you're going to have a negative

  correlation there it would only be if

  you had a terrible translation and the

  app was actually worse after localize


  but generally speaking I think you know

  having something that's more relevant to

  a customer by nature should increase

  that somewhat but the other reason that

  I think is good to keep in mind when

  you're thinking about whether you should

  or shouldn't localize your application

  is in general I think Apple tends to

  only feature applications that are

  localized in the countries App Store

  that they're doing the feature in and so

  if you want to be featured in the

  Japanese App Store in the German App

  Store in the French App Store in the

  Spanish app store you probably need to

  be localized into that country and

  probably have me at the very least have

  your screenshots and app store

  description localized and probably even

  your app as well and that certainly is

  it again it's just one of these

  opportunities that you know in as

  cut-throat of a market as the App Store

  is those little edges those little

  things that yep in general localization

  isn't a mountain of work it's something

  that you have to work on and it'll lose

  you a you know a day out of a you know a

  point release kind of work you may it's

  hard to put your finger on exactly the

  impact that it's having but I think

  it'll have an impact and the reality is

  it's like it's it's a little advantage

  that you may as well take that you may

  you know it's something you can do

  directly and it's not like you have to

  think of this grand new innovative

  vision for something where you're you've

  come up with something totally new it's

  like you're just doing the basics better

  and maybe if your competitors aren't

  localized then you'll have that ledge on

  them and especially I think a lot of App

  Store algorithms as best I can tell or

  have this kind of this built-in sense of

  as you get a little bit better there's a

  stronger benefit to the person in front

  which is problematic in some ways but in

  this case can be beneficial that if you

  can do lots of little things to be

  slightly better than your competitor

  you're showing up higher in charts

  you're more likely to be featured you

  may show up higher in search there's all

  these little things that can add up and

  this is just one of them and so in

  general let's say you should localize

  your app and I mean I was actually

  looking at it overcast


  before your recording and it's a funny

  app because I think most of the app you

  could localize very easily because most

  of it is not it's it's content that's

  relevant to the user already it's like

  it's self localizing you know if I'm in

  France listening to French podcasts you

  don't have to like translate the title

  of the podcasts all that it is already

  there it's just the surrounding

  infrastructure around it and you know

  even the names of like the name of the

  playlist they're gonna name the playlist

  whatever they want to name it it's not

  like you have to do something clever

  there it's just some other labels and so

  it's probably something worth doing yeah

  I mean it's also beyond like selfish

  reasons of this will get more downloads

  we know which is which are very

  important beyond that though a lot of

  people if you don't localize and I know

  this from the experience of having apps

  that I haven't localized if you don't

  localize a lot of people who don't speak

  your language will still use the app

  anyway they'll just fumble through like

  they'll just you know cuz like a lot of

  times like there might not be any other

  apps to do the thing or they might have

  heard about yours and yours might be the

  best one or they might want to try yours

  or whatever the reason a lot of people

  who don't speak the language of your app

  will try to use it regardless and so

  it's it's really a design question of

  like you know do you want the experience

  of using your app to be better for

  people who don't speak the language that

  it's in do you want do you want you know

  them to to be able to use it do you want

  to be able to provide value to people

  who don't speak your language and to

  some degree you know like as you said

  like you know if you look at overcast

  I've taken a lot of this to heart where

  like I try to basically avoid a lot of

  text it where it where possible but you

  know it you know just avoiding the need

  for text and translation will get you a

  lot of the way there and will let people

  try to kind of figure out and fumble

  through more easily like I mean I see

  even like with games like my

  four-year-old son can't read yet but he

  he knows how to play a lot of games on

  his iPad because they don't rely so much

  on text they you know they they just

  have buttons and and icons things and

  and he's able to figure those out you

  know the more your app can not rely on

  text the better but for the text it does

  rely on it you're doing a great service

  to the design and experience of a lot of

  real world users by localizing

  because people who don't speak your

  language and try to use it anyway but

  anyway in the case of overcast though I

  am also a little bit scared of of a

  number of issues that will probably get

  you in the second half of the show but

  like I mean you know little things like

  what you mentioned the UI design like

  there are so many features and and

  labels in the interface where like I've

  chosen the words extremely carefully and

  like like I will choose the name of a

  feature based on what will fit in in the

  table view cell in the settings screen

  look like I I will often like make

  decisions about like exactly what words

  this has to be based on like what will

  fit and I know that if I localize

  everything it will add a lot of overhead

  to a lot of a lot of the testing and the

  validation of the UI and everything on

  different sized devices especially and

  some of that we can over we can automate

  some of it we can't but also it will be

  very easy for my app to be misunderstood

  but I guess this is kind of the you know

  the perfect the anatomy of a good like

  right now my app is not is being

  understood even worse by people who

  don't speak my language so I guess maybe

  maybe odd that's just a cost I'd have to

  bear yeah well before we continue on

  that front we are brought to you this

  week by cocoa conf now this upcoming

  March 28th through 23rd cocoa conf is

  returning to the u7t National Park for

  its third us Emma tea event and let me

  tell you people I have heard so many

  great things about this I'm gonna try to

  go this year I think cuz I've heard so

  many great things about it and I keep

  having scheduling problems I can't go

  but I wish I can go to this event I

  think I'm I try to make it work this

  year we'll see anyway this event marks

  20th through 23rd held again at the

  Assembly Lodge at the Falls new time a

  national park speakers include ashley

  nelson Hornstein friend of the show

  David Smith and the anak Oh Matt trance

  Jamie Newberry Brent Simmons and Daniel

  Steinberg sessions run in the mornings

  and evenings and afternoons are spent

  exploring Yosemite National Park with

  activities including ranger-led hikes a

  bus tour of the valley a photo walk by

  Ted photographer James Dunn and Davidson

  these are all great options for you to

  defer you to choose if you want to

  there's also music by james Dempsey and

  the break points and by Jonathan song a

  day man and you can use code under the

  radar to save 20% on your tickets to

  Yosemite so head or no

  Cocco conf comm /u assembly to register

  david you'll be there obviously your

  speaking i really hope to be there looks

  to be a great conference and thanks a

  lot to coco khan for sponsoring our show

  once again so to pick back up what you

  were talking about i think there is a

  fundamental thing and we'll think for

  the rest of the show we'll kind of dive

  into a bit of the mechanics of what

  localization is that once you finally

  decide it's something that you're going

  to do at least I think you kind of have

  to let go a little bit on perfection in

  in order to approach this because just

  fundamentally the something like the

  width of words in languages is you know

  just mind-bendingly different between

  languages you'll have a lane you know

  the classic example is immense to have

  these very long words for you know for

  relatively simple concepts and you go

  all the way to want some of the more

  aged asian languages where you'll have a

  sing a single one character symbol

  that's the equivalent of what's being

  said there and so you'll never have like

  I know what the feeling of what you're

  talking about where you want to have

  just that perfectly you know that

  perfect word that makes it everything

  line up nicely or it gives you a good

  you know sort of balance to the screen

  and when you're localizing you just at a

  certain point if to say like it's going

  to be impossible and I'd rather yeah

  it's like think like you just said it's

  it I'd rather it be the understandable

  then visually perfect and maybe there's

  a way that if you were really a

  linguistic genius that you could find

  different words you know that are more

  appropriate or might have to convey the

  same meaning but have it more similar

  lengths like maybe that's possible but I

  think I've just had to accept that going

  down this road is probably better

  because not doing it it's like having

  something that looks visually slightly

  less unbalanced less balanced perhaps is

  going to be better than something that

  looks balanced but is unintelligible

  yeah so when you're localizing something

  I think there's probably I think briefly

  just say there's two things that you're

  sort of typically doing you're

  localizing the language so I am an

  English speaker I that's the only

  language that I really can speak with

  any fluency

  and so I'm alright I write my

  applications in English as a result and

  I can take that language all the English

  words and translate them into another

  language and then there's the more

  cultural differences and this can both

  be things like we were saying with units

  you know so metric versus imperial units

  or date formats or even getting into

  differences within a language so for

  example we spelled the word color

  differently in the United States than

  they do in Great Britain and so you can

  get into those kind of cultural

  differences yeah but but we're right of

  course we are it's it you don't need

  that you that you is completely

  unnecessary and that's the way it is the

  UI color doesn't have a unit so for the

  way I'm working on iOS UI calor UI calor

  so you can do there's two those two

  different things that you can be

  localizing in and in general you're the

  more cultural ones are a lot of the

  things that you're probably going to

  want to lean on Apple for for their date

  for matters and you're in for matters

  and number for matters and the language

  ones is probably what I'll talk mostly

  about now because that's when most

  people think of localization I think

  that's what we think of and that's

  taking all of the strings that are

  displayed in your application and

  wrapping them up in NS localized string

  macros and I realize I just don't

  actually I don't actually know how you

  do this in Swift but I'm sure there's

  something similar to it but it's

  probably not caused NS localized string

  but there's something I'm sure that can

  translate back and forth and you run a

  little script that pulls all those out

  of your out of your application and you

  end up with this little configuration

  file that's basically just a string and

  then a translation and you can take that

  file and send it to a translation

  service there's many of these I've used

  a bunch of them in general I'm sure

  there may be are some differences but by

  and large like that I've used a couple

  and they've all been about the same it's

  at this point and you know in iOS

  development I think the tools are mature

  enough that you any of these sort of

  bright and I think Apple even has a

  website where they recommend a bunch of

  them you just take your strings file you

  send it to them and they'll have a

  translator translate it back one thing

  you want to do there is you know a

  localized string you give both the

  string you want to translate and you can

  have a little

  comments field and it's very strongly

  recommended that you put something

  useful in that comments field not just

  the same string again or leaving it

  blank because you want to give the

  translator a sense of what the string

  actually means in context I know some

  translation services also even request

  that you send screenshots of your

  application to the translator so they

  can see what it looks like in context

  and so they're going to translate it and

  send it back to you or something you can

  also do is ask a friend or colleague

  I've started actually doing this a few

  times especially when I'm doing small

  translation batches I'll just ask on

  Twitter hey Becky I'll make a little

  Google Form and say hey here's this one

  string that I need up here for a point

  release if you speak any of the

  languages that my apps translated in

  which I think right now is German

  Spanish French Russian Chinese Japanese

  and Korean I think are the ones that I

  use typically maybe Portuguese I if you

  speak any this languages translate it

  and in you know it obviously that that's

  nice for me because I have a large

  enough audience that I can find someone

  who speaks one of those languages but

  otherwise just use a translation

  services and it's the same I will say

  like generally what you want is somebody

  who is native to the target language but

  fluent in yours not vice-versa it's like

  if you if you've come up with like you

  know somebody who who grew up speaking

  English but you know I learned it but a

  French in high school like that's

  ideally you want a French person to do

  the translation for you instead who

  knows enough English to to understand

  what you're trying to say you know I

  could because a native speaker that

  there's a lot of differences and nuance

  to these languages to any language and

  you ideally you want a native speaker

  yes and I think I mean I've never run

  into this a few times with translation

  services or in an ideal way and this is

  why I've actually started leaning more

  on asking friends and people I know who

  speak those speak the languages that I'm

  translating into is if someone who

  actually uses your application on a

  regular basis will have a better

  translation because I've definitely had

  a thing where they say like the word

  you're using here is the right word it's

  not like you and they messed up the

  translation but the way in which they're

  using it is different than what

  typical person would expect it to be set

  as and you know you can

  I've definitely I will raise my hand and

  confess that I have used Google

  Translate a few times I don't do that

  when it is trying to rush out an update

  and I didn't like usually this is the

  problem with localization is once you do

  it you kind of have to keep doing it you

  know if you make a small change that

  adds a string or changes a string that's

  a call I don't want to have to go

  through a translation service or go

  through a big process so I always just

  go to google translate in turn and did a

  few translations and it's a train wreck

  like I done it and I've lived to tell

  the tale but I would not recommend it it

  is definitely not something you'll get

  some very strange customer support

  emails where they're just like so I

  don't know if I had to say this best but

  the person who did your translation

  didn't really translate it so much as

  turned it into unintelligible gibberish

  and so avoid that like if you're just

  wanting to have a placeholder they're a

  much better place holder is in Xcode you

  can launch your application with a

  pseudo language which is designed to

  test your layout and so things are

  really long and have to use different

  character sets and things like if you

  want to just have something there to

  test validate your layout with use that

  don't use Google Translate I have made a

  mistake then yeah you just go through

  that you end up with the strings back

  you put me back into application and now

  your application when you launch it will

  be in the new language and it's kind of

  cool the first time you launch your

  application and you don't understand any

  of the text it's kind of a strange

  feeling but it's kind of cool and then

  you have an app that is is localized and

  as you go you just as you make changes

  you just need to keep track of the

  differences you know that the new

  strings or if you make changes to

  strings and your apps localized and I

  don't that it's anything even more on

  that process like Apple has gotten the

  toolset to at this point be pretty good

  that the there was time I think earlier

  when I looked into localization back in

  like iOS three or four days and it was

  much more manual in much more cumbersome


  in general now you just kind of run the

  few scripts it pulls it out you send

  those offshore translation service you

  get them back you put them back in and

  you're kind of you know you're you're up

  and running so how do you handle the

  issue of other language support like if

  people who don't speak your language

  email you for technical support because

  that's always been my concern with

  localizing my stuff is like well even if

  I localize the whole app I'd have to you

  know am I also gonna localize the whole

  website the content I'm showing in the

  app like the the podcasts tour runs like

  all that stuff and then also my support

  which I mean I'm a bad example because I

  don't really provide support I guess but

  sure but for people who are who are

  better people than me who provide

  support how do you handle that question

  yeah and so this is something that I was

  actually it was the last topic I wanted

  to touch on because I feel like it's

  easy to think oh well then I have to

  provide support in these languages and I

  don't speak those languages and a you'll

  get support in the native language of

  your users either way and so sometimes

  people who know who I am and know that

  I'm based in the US and you know that I

  speak English will email me in English

  even though I know they're you know

  they're they're German or they're French

  or they're Spanish but generally you'll

  just get emails from people who found

  your app on the App Store to unload it

  and have a question and they'll hit the

  contact button if they can find it

  because obviously it may if you if it's

  caught if it's you know email us is the

  button label they may not actually know

  what that means

  but maybe email is a fairly good term

  but maybe that's a side point it's a

  good idea to put a like a an icon on

  that button either way but you get an

  email and you those will happen either

  way and so you don't I really wouldn't

  worry about it too much and my

  experience is I take that and this is a

  an example where Google Translate is

  your friend rather than in your in-app

  translations you just take if you take

  what they sent you and run it through

  Google Translate it's usually good

  enough that you can understand what

  their what their the intent is

  especially because customer support has

  an by its nature is somewhat repetitive

  like there's tend to be certain issues

  that come up over and over again and so

  you'll get an email and you run through

  go translate you'll get a sense of what

  they're saying and then when I just do

  what I typically do is I'll respond

  with I'll respond in English because

  there's like ant right in a new language

  so that's all I can do and then I'll

  take that and run my response through

  google translate I'm into the whatever

  language they emailed me in and I put

  that underneath my English transfer text

  ends in it back and in the hopes that

  the combination of if a speaks some

  English and then having the Google

  Translate rough translation they'll be

  able to understand and I would say by

  and large that works that people

  understand that I don't speak that their

  language that it's I don't know get a

  lot of people upset about that or have

  issues with that it kind of there's this

  natural thing that I'm in English I'm an

  American company I speak English and I'm

  just doing the best I can and I think I

  wouldn't worry about it beyond that I

  think you might have converted me let's

  see it I like to look forward to

  launching overcast in German and seeing

  all those nice big long strings okay I'm

  not looking forward to testing that all

  right thanks for listening everybody and

  we will talk to you next week bye