Under the Radar

Under the Radar 41: Internationalization


00:00:00   welcome to under the radar a show about

00:00:02   independent iOS app development I'm

00:00:04   Marco Arment and I'm David Smith under

00:00:06   the radar is never longer than 30

00:00:07   minutes so let's get started so today we

00:00:11   wanted to dive into the topic of

00:00:14   localization or as some people call it

00:00:16   internationalization and some people

00:00:17   think those are different I don't really

00:00:19   know I just call it all localization and

00:00:21   networks for me but more generally we're

00:00:23   talking about the concept of taking your

00:00:24   application and making it having its

00:00:27   appearance and its strings in the things

00:00:29   in it be adaptive based on where in the

00:00:33   world your user is and what language

00:00:35   they're speaking and being adaptive in

00:00:37   those kinds of ways and generally this

00:00:40   is kind of one of those things that I

00:00:41   feel like it's a lot of times viewed as

00:00:46   kind of like a hygiene vague like

00:00:48   consensus it's this thing that you maybe

00:00:52   you think you should do but often you

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

00:00:58   applications localized at all and it was

00:01:00   always this thing that I'd go to the

00:01:01   session at WDC and kind of feel bad

00:01:03   about myself and say oh yes here I'll do

00:01:05   it and then go back and I wouldn't

00:01:07   actually do it and I think it's a tricky

00:01:09   one because unless you live in a multi

00:01:12   lingual or international life yes where

00:01:16   if you have speak two languages at home

00:01:19   or you live abroad from where your

00:01:20   native language is or something like

00:01:22   that it's not something that you would

00:01:24   necessarily come across and you know in

00:01:27   your day to day life and it's always

00:01:29   hard I think to write features for an

00:01:32   application that you yourself won't

00:01:34   benefit from I mean using it you know so

00:01:36   when I make my app have you know just

00:01:40   have display all of its you know strings

00:01:42   in German that's great

00:01:44   but I don't speak German so I have no

00:01:47   idea if a if they're right and we'll get

00:01:50   into a bit later and be like I don't

00:01:53   feel that benefit and so I hope to do it

00:01:56   and I'll certainly say it's it's a bit

00:01:59   of a pain to do because if you want to

00:02:01   do this you have to structure a lot of

00:02:03   the visual components of your

00:02:05   application very differently you have to

00:02:08   make things very flexible you can't hard

00:02:09   code a lot of values everything has to

00:02:12   be able to be switched in an

00:02:14   and adaptable depending on what language

00:02:16   and locale your app is being used but

00:02:20   one day I bit the bullet and in the

00:02:23   first app I ever localized was pedometer

00:02:25   plus plus and I localized it and had a

00:02:29   pretty impactful change as a result like

00:02:31   I found that the my downloads outside of

00:02:35   english-speaking countries you know so

00:02:36   outside of the United States Great

00:02:38   Britain Australia New Zealand Canada

00:02:40   candidate with an asterisk obviously

00:02:42   they speak French there too but they buy

00:02:44   an outside of those countries I found

00:02:47   that my downloads went up by about three

00:02:48   times Wow and overall that meant like

00:02:52   obviously that meant that my overall

00:02:54   sales didn't go up by three times

00:02:55   because most of my sales were still

00:02:56   coming from english-speaking countries

00:02:58   but overall my sales did go up and I

00:03:00   think we're gonna have to buy about more

00:03:02   like 50% which was encouraging and the

00:03:08   effort it took to get there has you know

00:03:11   certainly it's debatable overall whether

00:03:13   it was the right trade-off but I think

00:03:16   in general it taught me the lesson that

00:03:17   there is an impact this and it is

00:03:19   something that we at least all need to

00:03:21   consider because I've also had the

00:03:23   flipside where I've localized some of my

00:03:25   other applications and I've had

00:03:26   essentially no increase and so it's not

00:03:28   like a silver bullet it's not like if

00:03:29   you localize your app your sales will go

00:03:31   up three times like that's definitely

00:03:33   not the case I've had the experience I

00:03:36   had in pedometer plus plus was by far

00:03:38   the best I've had but it's also you know

00:03:41   it's somewhat distinct from some of my

00:03:43   other experiences have you ever

00:03:46   localized any of your applications

00:03:48   um I mean basically the answer is no but

00:03:52   I've I like I've been I've been near

00:03:55   internationalization efforts before with

00:03:57   in past jobs and so I kind of know

00:03:59   what's involved and I I know I I too

00:04:02   have gone every year to the WC sessions

00:04:05   about localization and and I to have sat

00:04:08   there feeling bad about myself thinking

00:04:09   why don't I just do this already let's

00:04:11   just do it you know but it's as you

00:04:13   mentioned it is it is not easy to do and

00:04:16   one of the biggest questions in my mind

00:04:18   and which I hear people ask me all the

00:04:20   time is will this actually increase

00:04:23   sales and by how much and as you know

00:04:25   like a big increase for you

00:04:27   in non-english speaking countries that's

00:04:29   that's great however it's hard to know

00:04:32   as you said like it's hard to know

00:04:33   whether that will apply to my app or not

00:04:35   and it's hard to know how the how big

00:04:37   that increase will be and then whether

00:04:38   it'll be worth the costs but you know to

00:04:40   me I kind of I kind of see

00:04:42   internationalization and localization I

00:04:44   also don't know the difference I know

00:04:46   there is one and people will get mad at

00:04:47   us for not knowing it but I don't know

00:04:48   what it is I see them too as kind of a

00:04:51   code hygiene thing and it's kind of

00:04:53   similar to accessibility in some ways

00:04:55   where if you make an interface

00:04:59   accessible via the iOS accessibility

00:05:02   mechanisms for things like voice-over

00:05:04   and other assistive technologies it

00:05:06   takes sometimes it takes a little bit

00:05:08   more work in the coding and design stage

00:05:11   but it usually isn't that much more work

00:05:13   to make it possible and and to make it

00:05:15   to do it well usually it's it's actually

00:05:18   very little work because apple's stuff

00:05:20   is so good you just kind of have to be

00:05:21   aware of it as you're coding and there

00:05:24   are certain aspects of

00:05:26   internationalization that are that easy

00:05:28   things like date formatting and stuff

00:05:31   like that like number format and

00:05:32   currency formatting in in those kind of

00:05:35   areas Apple provides really easy api's

00:05:37   date formatter is no but you know like

00:05:39   that kind of stuff that if you just use

00:05:42   them correctly at all then you will just

00:05:45   get nicely formatted things your your

00:05:48   strings won't be automatically

00:05:50   translated to different languages but

00:05:51   things like displaying numbers and

00:05:53   things like that that will be that's

00:05:55   very easy to get right and to have kind

00:05:58   of done for you automatically

00:06:00   in overcast I make extensive use of that

00:06:03   kind of thing and for the strings I do

00:06:06   wrap all of my UI strings in NS

00:06:09   localized string because this macro that

00:06:12   you could you know look up NS localized

00:06:13   string if you don't know what it is you

00:06:14   should be using it III do that for kind

00:06:18   of preparation for potential future

00:06:20   internationalization efforts so that

00:06:22   it's easy to it's easy to see all my UI

00:06:24   strings and easy to easy to pull them

00:06:26   out and have them automatically

00:06:27   translated or have them translated in

00:06:29   automated kind of way if I ever need

00:06:32   that but I don't actually do that I

00:06:34   haven't actually translated it so I have

00:06:37   and I have a few instances where I'm

00:06:38   kind of abusing the formatters like you

00:06:41   my in my list of episodes I am it the

00:06:45   year from the date of from an episodes

00:06:48   release date if it's the current year

00:06:50   because I think that's just a nice

00:06:52   little thing to get a little bit less

00:06:53   clutter like if your episode was

00:06:54   released on August 1st and that was two

00:06:57   weeks ago I don't need to know that it

00:07:00   was 2016 like because I already know

00:07:02   it's 2016 thank you and this this works

00:07:05   there is no built-in function that I

00:07:07   know of to do this very well so I do

00:07:10   kind of a hack which is I get the

00:07:13   localized version of the current year

00:07:14   and just remove that substring from the

00:07:16   date string and this turned out to be a

00:07:18   really dumb implementation because in

00:07:20   certain countries there's a key where it

00:07:24   was I think it was it might have been in

00:07:26   a Portuguese speaking country or a

00:07:28   Spanish speaking country but there was

00:07:29   something where I got an email from user

00:07:32   saying this is kind of weird-looking

00:07:33   because there's like there's a word

00:07:35   between the the day and/or the month and

00:07:38   the year

00:07:38   either way it's formatted where it's

00:07:40   like it's like of or the so it's like

00:07:43   you know July of 2016 you know whatever

00:07:46   the translate version of that is and so

00:07:47   in my version of this it just says you

00:07:49   know 16th July of that's not great no

00:07:53   it's not great so I have to probably

00:07:56   revisit this this strategy but for the

00:07:59   most part everything else has been has

00:08:01   been done only in the ways of like using

00:08:04   the built-in formatters for numbers and

00:08:06   dates and currencies and things but not

00:08:08   actually translating the strings but

00:08:09   making it easy to do so in the future if

00:08:11   I want to yeah and I think the approach

00:08:13   you're taking is certainly the one that

00:08:15   is at the very least the right approach

00:08:18   that making in a as you're going as

00:08:20   you're building an app being aware that

00:08:22   this might be something you want to do

00:08:24   later I think will certainly increase

00:08:26   the likelihood that one day you will

00:08:27   actually get to it rather than hitting

00:08:30   the point where it's like okay I need to

00:08:31   know like search in my app for every

00:08:35   string that is being displayed and then

00:08:38   we're you know add the NS localized

00:08:40   string macro to it or I need to now go

00:08:43   and you know do all this to switch

00:08:45   everything over to using formatters and

00:08:47   I said now in iOS 10 I think there's the

00:08:50   new units for matters which are even

00:08:52   like take this even farther that you can

00:08:54   now

00:08:54   it's not even just dates and currency

00:08:57   that you can do in numbers I think you

00:08:59   could you know for you can even do

00:09:01   clever things about speeds or distances

00:09:03   so like I run into this with a couple my

00:09:05   workout apps where you know it's how far

00:09:07   did you run and right now I do some

00:09:10   things like where I need to be clever

00:09:12   about which unit to use and have options

00:09:15   in the application for switching that

00:09:16   you know I first launched I'll see what

00:09:20   country you're in and I assume that if

00:09:23   you're not in the United States you're

00:09:24   probably gonna use metric units which in

00:09:27   general I think is pretty much the case

00:09:29   and do I should I do that I do this

00:09:31   which is manually and then you know I

00:09:33   was ten I can do this automatically but

00:09:35   by and large it seems like an in general

00:09:37   a good idea to keep this is something

00:09:39   that it's part of building an app

00:09:41   properly and just like you were saying

00:09:43   with accessibility like if you build an

00:09:45   app to do this you're probably all

00:09:47   ultimately also going to be a better app

00:09:48   because you're being thoughtful about

00:09:51   what you're displaying to your user at a

00:09:53   different level you know sometimes I run

00:09:55   into situations where I'm just being

00:09:58   lazy and so I'll add some words of

00:10:01   explanation for something like and in

00:10:04   that case it's probably symptomatic of

00:10:07   my app actually being too confusing and

00:10:11   not obvious enough about how to operate

00:10:12   it if I have just a build instructions

00:10:14   into it and if you're in a localization

00:10:17   mindset there's a cost to adding that

00:10:20   string because now that gets added to

00:10:22   your list of things that you need to

00:10:23   translate and have localized and so it's

00:10:27   in some ways that it helps you think

00:10:29   about your application in a in a

00:10:31   constructive way to make sure that you

00:10:32   know if you couldn't read anything in

00:10:34   this application could you still use it

00:10:36   and if you can that's probably a good

00:10:39   indication that even if you can read the

00:10:42   the strings and the labels and things in

00:10:44   your application you know it's it's

00:10:45   still going to be a good experience

00:10:46   um but by and large it's funny things I

00:10:49   think doing localizing just to have more

00:10:53   downloads is I think a good reason and I

00:10:55   think in general for most people there

00:10:57   is going to be some it's very unlikely

00:10:59   that you're going to have a negative

00:11:00   correlation there it would only be if

00:11:02   you had a terrible translation and the

00:11:04   app was actually worse after localize

00:11:07   look

00:11:08   but generally speaking I think you know

00:11:11   having something that's more relevant to

00:11:12   a customer by nature should increase

00:11:14   that somewhat but the other reason that

00:11:17   I think is good to keep in mind when

00:11:19   you're thinking about whether you should

00:11:20   or shouldn't localize your application

00:11:22   is in general I think Apple tends to

00:11:25   only feature applications that are

00:11:28   localized in the countries App Store

00:11:31   that they're doing the feature in and so

00:11:34   if you want to be featured in the

00:11:36   Japanese App Store in the German App

00:11:38   Store in the French App Store in the

00:11:39   Spanish app store you probably need to

00:11:43   be localized into that country and

00:11:45   probably have me at the very least have

00:11:47   your screenshots and app store

00:11:49   description localized and probably even

00:11:51   your app as well and that certainly is

00:11:53   it again it's just one of these

00:11:54   opportunities that you know in as

00:11:57   cut-throat of a market as the App Store

00:11:59   is those little edges those little

00:12:02   things that yep in general localization

00:12:05   isn't a mountain of work it's something

00:12:08   that you have to work on and it'll lose

00:12:10   you a you know a day out of a you know a

00:12:12   point release kind of work you may it's

00:12:17   hard to put your finger on exactly the

00:12:19   impact that it's having but I think

00:12:21   it'll have an impact and the reality is

00:12:24   it's like it's it's a little advantage

00:12:26   that you may as well take that you may

00:12:28   you know it's something you can do

00:12:29   directly and it's not like you have to

00:12:32   think of this grand new innovative

00:12:35   vision for something where you're you've

00:12:38   come up with something totally new it's

00:12:39   like you're just doing the basics better

00:12:41   and maybe if your competitors aren't

00:12:44   localized then you'll have that ledge on

00:12:45   them and especially I think a lot of App

00:12:47   Store algorithms as best I can tell or

00:12:50   have this kind of this built-in sense of

00:12:54   as you get a little bit better there's a

00:12:57   stronger benefit to the person in front

00:12:59   which is problematic in some ways but in

00:13:02   this case can be beneficial that if you

00:13:04   can do lots of little things to be

00:13:05   slightly better than your competitor

00:13:07   you're showing up higher in charts

00:13:09   you're more likely to be featured you

00:13:10   may show up higher in search there's all

00:13:12   these little things that can add up and

00:13:14   this is just one of them and so in

00:13:15   general let's say you should localize

00:13:17   your app and I mean I was actually

00:13:18   looking at it overcast

00:13:19   before

00:13:20   before your recording and it's a funny

00:13:23   app because I think most of the app you

00:13:24   could localize very easily because most

00:13:28   of it is not it's it's content that's

00:13:30   relevant to the user already it's like

00:13:32   it's self localizing you know if I'm in

00:13:34   France listening to French podcasts you

00:13:36   don't have to like translate the title

00:13:38   of the podcasts all that it is already

00:13:40   there it's just the surrounding

00:13:42   infrastructure around it and you know

00:13:44   even the names of like the name of the

00:13:46   playlist they're gonna name the playlist

00:13:48   whatever they want to name it it's not

00:13:49   like you have to do something clever

00:13:51   there it's just some other labels and so

00:13:53   it's probably something worth doing yeah

00:13:55   I mean it's also beyond like selfish

00:13:58   reasons of this will get more downloads

00:14:01   we know which is which are very

00:14:02   important beyond that though a lot of

00:14:05   people if you don't localize and I know

00:14:07   this from the experience of having apps

00:14:09   that I haven't localized if you don't

00:14:11   localize a lot of people who don't speak

00:14:14   your language will still use the app

00:14:15   anyway they'll just fumble through like

00:14:17   they'll just you know cuz like a lot of

00:14:19   times like there might not be any other

00:14:20   apps to do the thing or they might have

00:14:22   heard about yours and yours might be the

00:14:24   best one or they might want to try yours

00:14:26   or whatever the reason a lot of people

00:14:28   who don't speak the language of your app

00:14:29   will try to use it regardless and so

00:14:32   it's it's really a design question of

00:14:34   like you know do you want the experience

00:14:37   of using your app to be better for

00:14:39   people who don't speak the language that

00:14:40   it's in do you want do you want you know

00:14:42   them to to be able to use it do you want

00:14:44   to be able to provide value to people

00:14:45   who don't speak your language and to

00:14:47   some degree you know like as you said

00:14:48   like you know if you look at overcast

00:14:50   I've taken a lot of this to heart where

00:14:51   like I try to basically avoid a lot of

00:14:54   text it where it where possible but you

00:14:57   know it you know just avoiding the need

00:14:59   for text and translation will get you a

00:15:01   lot of the way there and will let people

00:15:02   try to kind of figure out and fumble

00:15:04   through more easily like I mean I see

00:15:07   even like with games like my

00:15:09   four-year-old son can't read yet but he

00:15:12   he knows how to play a lot of games on

00:15:14   his iPad because they don't rely so much

00:15:16   on text they you know they they just

00:15:17   have buttons and and icons things and

00:15:19   and he's able to figure those out you

00:15:22   know the more your app can not rely on

00:15:23   text the better but for the text it does

00:15:26   rely on it you're doing a great service

00:15:29   to the design and experience of a lot of

00:15:31   real world users by localizing

00:15:34   because people who don't speak your

00:15:36   language and try to use it anyway but

00:15:38   anyway in the case of overcast though I

00:15:40   am also a little bit scared of of a

00:15:42   number of issues that will probably get

00:15:43   you in the second half of the show but

00:15:45   like I mean you know little things like

00:15:46   what you mentioned the UI design like

00:15:48   there are so many features and and

00:15:51   labels in the interface where like I've

00:15:53   chosen the words extremely carefully and

00:15:56   like like I will choose the name of a

00:15:59   feature based on what will fit in in the

00:16:02   table view cell in the settings screen

00:16:03   look like I I will often like make

00:16:06   decisions about like exactly what words

00:16:08   this has to be based on like what will

00:16:10   fit and I know that if I localize

00:16:13   everything it will add a lot of overhead

00:16:15   to a lot of a lot of the testing and the

00:16:19   validation of the UI and everything on

00:16:20   different sized devices especially and

00:16:22   some of that we can over we can automate

00:16:24   some of it we can't but also it will be

00:16:28   very easy for my app to be misunderstood

00:16:31   but I guess this is kind of the you know

00:16:33   the perfect the anatomy of a good like

00:16:34   right now my app is not is being

00:16:36   understood even worse by people who

00:16:38   don't speak my language so I guess maybe

00:16:40   maybe odd that's just a cost I'd have to

00:16:42   bear yeah well before we continue on

00:16:45   that front we are brought to you this

00:16:47   week by cocoa conf now this upcoming

00:16:49   March 28th through 23rd cocoa conf is

00:16:52   returning to the u7t National Park for

00:16:55   its third us Emma tea event and let me

00:16:57   tell you people I have heard so many

00:16:59   great things about this I'm gonna try to

00:17:00   go this year I think cuz I've heard so

00:17:01   many great things about it and I keep

00:17:03   having scheduling problems I can't go

00:17:04   but I wish I can go to this event I

00:17:06   think I'm I try to make it work this

00:17:07   year we'll see anyway this event marks

00:17:10   20th through 23rd held again at the

00:17:12   Assembly Lodge at the Falls new time a

00:17:14   national park speakers include ashley

00:17:16   nelson Hornstein friend of the show

00:17:17   David Smith and the anak Oh Matt trance

00:17:21   Jamie Newberry Brent Simmons and Daniel

00:17:23   Steinberg sessions run in the mornings

00:17:24   and evenings and afternoons are spent

00:17:26   exploring Yosemite National Park with

00:17:29   activities including ranger-led hikes a

00:17:31   bus tour of the valley a photo walk by

00:17:33   Ted photographer James Dunn and Davidson

00:17:35   these are all great options for you to

00:17:36   defer you to choose if you want to

00:17:37   there's also music by james Dempsey and

00:17:40   the break points and by Jonathan song a

00:17:42   day man and you can use code under the

00:17:44   radar to save 20% on your tickets to

00:17:46   Yosemite so head or no

00:17:48   Cocco conf comm /u assembly to register

00:17:51   david you'll be there obviously your

00:17:52   speaking i really hope to be there looks

00:17:54   to be a great conference and thanks a

00:17:56   lot to coco khan for sponsoring our show

00:17:58   once again so to pick back up what you

00:18:01   were talking about i think there is a

00:18:02   fundamental thing and we'll think for

00:18:04   the rest of the show we'll kind of dive

00:18:05   into a bit of the mechanics of what

00:18:08   localization is that once you finally

00:18:10   decide it's something that you're going

00:18:11   to do at least I think you kind of have

00:18:14   to let go a little bit on perfection in

00:18:18   in order to approach this because just

00:18:22   fundamentally the something like the

00:18:25   width of words in languages is you know

00:18:29   just mind-bendingly different between

00:18:31   languages you'll have a lane you know

00:18:33   the classic example is immense to have

00:18:35   these very long words for you know for

00:18:38   relatively simple concepts and you go

00:18:40   all the way to want some of the more

00:18:42   aged asian languages where you'll have a

00:18:43   sing a single one character symbol

00:18:45   that's the equivalent of what's being

00:18:48   said there and so you'll never have like

00:18:50   I know what the feeling of what you're

00:18:51   talking about where you want to have

00:18:52   just that perfectly you know that

00:18:55   perfect word that makes it everything

00:18:57   line up nicely or it gives you a good

00:18:59   you know sort of balance to the screen

00:19:02   and when you're localizing you just at a

00:19:04   certain point if to say like it's going

00:19:07   to be impossible and I'd rather yeah

00:19:09   it's like think like you just said it's

00:19:10   it I'd rather it be the understandable

00:19:14   then visually perfect and maybe there's

00:19:17   a way that if you were really a

00:19:18   linguistic genius that you could find

00:19:20   different words you know that are more

00:19:22   appropriate or might have to convey the

00:19:24   same meaning but have it more similar

00:19:26   lengths like maybe that's possible but I

00:19:28   think I've just had to accept that going

00:19:31   down this road is probably better

00:19:33   because not doing it it's like having

00:19:36   something that looks visually slightly

00:19:38   less unbalanced less balanced perhaps is

00:19:40   going to be better than something that

00:19:42   looks balanced but is unintelligible

00:19:44   yeah so when you're localizing something

00:19:49   I think there's probably I think briefly

00:19:51   just say there's two things that you're

00:19:52   sort of typically doing you're

00:19:53   localizing the language so I am an

00:19:57   English speaker I that's the only

00:19:59   language that I really can speak with

00:20:01   any fluency

00:20:01   and so I'm alright I write my

00:20:03   applications in English as a result and

00:20:07   I can take that language all the English

00:20:09   words and translate them into another

00:20:12   language and then there's the more

00:20:14   cultural differences and this can both

00:20:16   be things like we were saying with units

00:20:18   you know so metric versus imperial units

00:20:21   or date formats or even getting into

00:20:24   differences within a language so for

00:20:26   example we spelled the word color

00:20:28   differently in the United States than

00:20:30   they do in Great Britain and so you can

00:20:32   get into those kind of cultural

00:20:34   differences yeah but but we're right of

00:20:35   course we are it's it you don't need

00:20:37   that you that you is completely

00:20:38   unnecessary and that's the way it is the

00:20:41   UI color doesn't have a unit so for the

00:20:43   way I'm working on iOS UI calor UI calor

00:20:46   so you can do there's two those two

00:20:50   different things that you can be

00:20:51   localizing in and in general you're the

00:20:53   more cultural ones are a lot of the

00:20:55   things that you're probably going to

00:20:56   want to lean on Apple for for their date

00:21:00   for matters and you're in for matters

00:21:02   and number for matters and the language

00:21:03   ones is probably what I'll talk mostly

00:21:05   about now because that's when most

00:21:06   people think of localization I think

00:21:08   that's what we think of and that's

00:21:09   taking all of the strings that are

00:21:11   displayed in your application and

00:21:12   wrapping them up in NS localized string

00:21:15   macros and I realize I just don't

00:21:18   actually I don't actually know how you

00:21:19   do this in Swift but I'm sure there's

00:21:21   something similar to it but it's

00:21:23   probably not caused NS localized string

00:21:25   but there's something I'm sure that can

00:21:27   translate back and forth and you run a

00:21:30   little script that pulls all those out

00:21:32   of your out of your application and you

00:21:34   end up with this little configuration

00:21:36   file that's basically just a string and

00:21:37   then a translation and you can take that

00:21:40   file and send it to a translation

00:21:43   service there's many of these I've used

00:21:45   a bunch of them in general I'm sure

00:21:48   there may be are some differences but by

00:21:49   and large like that I've used a couple

00:21:51   and they've all been about the same it's

00:21:53   at this point and you know in iOS

00:21:57   development I think the tools are mature

00:21:59   enough that you any of these sort of

00:22:01   bright and I think Apple even has a

00:22:02   website where they recommend a bunch of

00:22:04   them you just take your strings file you

00:22:05   send it to them and they'll have a

00:22:06   translator translate it back one thing

00:22:09   you want to do there is you know a

00:22:11   localized string you give both the

00:22:12   string you want to translate and you can

00:22:14   have a little

00:22:14   comments field and it's very strongly

00:22:17   recommended that you put something

00:22:18   useful in that comments field not just

00:22:20   the same string again or leaving it

00:22:22   blank because you want to give the

00:22:24   translator a sense of what the string

00:22:26   actually means in context I know some

00:22:29   translation services also even request

00:22:31   that you send screenshots of your

00:22:33   application to the translator so they

00:22:35   can see what it looks like in context

00:22:37   and so they're going to translate it and

00:22:38   send it back to you or something you can

00:22:40   also do is ask a friend or colleague

00:22:42   I've started actually doing this a few

00:22:44   times especially when I'm doing small

00:22:45   translation batches I'll just ask on

00:22:48   Twitter hey Becky I'll make a little

00:22:50   Google Form and say hey here's this one

00:22:52   string that I need up here for a point

00:22:54   release if you speak any of the

00:22:56   languages that my apps translated in

00:22:58   which I think right now is German

00:23:00   Spanish French Russian Chinese Japanese

00:23:04   and Korean I think are the ones that I

00:23:05   use typically maybe Portuguese I if you

00:23:09   speak any this languages translate it

00:23:11   and in you know it obviously that that's

00:23:13   nice for me because I have a large

00:23:15   enough audience that I can find someone

00:23:17   who speaks one of those languages but

00:23:19   otherwise just use a translation

00:23:20   services and it's the same I will say

00:23:22   like generally what you want is somebody

00:23:25   who is native to the target language but

00:23:29   fluent in yours not vice-versa it's like

00:23:32   if you if you've come up with like you

00:23:33   know somebody who who grew up speaking

00:23:35   English but you know I learned it but a

00:23:37   French in high school like that's

00:23:38   ideally you want a French person to do

00:23:41   the translation for you instead who

00:23:43   knows enough English to to understand

00:23:46   what you're trying to say you know I

00:23:47   could because a native speaker that

00:23:49   there's a lot of differences and nuance

00:23:51   to these languages to any language and

00:23:53   you ideally you want a native speaker

00:23:56   yes and I think I mean I've never run

00:23:58   into this a few times with translation

00:24:00   services or in an ideal way and this is

00:24:03   why I've actually started leaning more

00:24:05   on asking friends and people I know who

00:24:07   speak those speak the languages that I'm

00:24:09   translating into is if someone who

00:24:12   actually uses your application on a

00:24:13   regular basis will have a better

00:24:15   translation because I've definitely had

00:24:17   a thing where they say like the word

00:24:18   you're using here is the right word it's

00:24:21   not like you and they messed up the

00:24:23   translation but the way in which they're

00:24:25   using it is different than what

00:24:28   typical person would expect it to be set

00:24:31   as and you know you can

00:24:33   I've definitely I will raise my hand and

00:24:35   confess that I have used Google

00:24:38   Translate a few times I don't do that

00:24:40   when it is trying to rush out an update

00:24:42   and I didn't like usually this is the

00:24:44   problem with localization is once you do

00:24:46   it you kind of have to keep doing it you

00:24:47   know if you make a small change that

00:24:49   adds a string or changes a string that's

00:24:51   a call I don't want to have to go

00:24:52   through a translation service or go

00:24:54   through a big process so I always just

00:24:55   go to google translate in turn and did a

00:24:57   few translations and it's a train wreck

00:24:59   like I done it and I've lived to tell

00:25:03   the tale but I would not recommend it it

00:25:04   is definitely not something you'll get

00:25:08   some very strange customer support

00:25:10   emails where they're just like so I

00:25:13   don't know if I had to say this best but

00:25:16   the person who did your translation

00:25:18   didn't really translate it so much as

00:25:20   turned it into unintelligible gibberish

00:25:23   and so avoid that like if you're just

00:25:27   wanting to have a placeholder they're a

00:25:29   much better place holder is in Xcode you

00:25:32   can launch your application with a

00:25:34   pseudo language which is designed to

00:25:37   test your layout and so things are

00:25:39   really long and have to use different

00:25:40   character sets and things like if you

00:25:42   want to just have something there to

00:25:45   test validate your layout with use that

00:25:48   don't use Google Translate I have made a

00:25:51   mistake then yeah you just go through

00:25:53   that you end up with the strings back

00:25:54   you put me back into application and now

00:25:56   your application when you launch it will

00:25:58   be in the new language and it's kind of

00:26:00   cool the first time you launch your

00:26:02   application and you don't understand any

00:26:04   of the text it's kind of a strange

00:26:07   feeling but it's kind of cool and then

00:26:08   you have an app that is is localized and

00:26:11   as you go you just as you make changes

00:26:12   you just need to keep track of the

00:26:15   differences you know that the new

00:26:16   strings or if you make changes to

00:26:17   strings and your apps localized and I

00:26:22   don't that it's anything even more on

00:26:24   that process like Apple has gotten the

00:26:25   toolset to at this point be pretty good

00:26:27   that the there was time I think earlier

00:26:31   when I looked into localization back in

00:26:33   like iOS three or four days and it was

00:26:38   much more manual in much more cumbersome

00:26:40   but

00:26:41   in general now you just kind of run the

00:26:42   few scripts it pulls it out you send

00:26:44   those offshore translation service you

00:26:46   get them back you put them back in and

00:26:47   you're kind of you know you're you're up

00:26:50   and running so how do you handle the

00:26:52   issue of other language support like if

00:26:56   people who don't speak your language

00:26:58   email you for technical support because

00:27:00   that's always been my concern with

00:27:01   localizing my stuff is like well even if

00:27:03   I localize the whole app I'd have to you

00:27:05   know am I also gonna localize the whole

00:27:07   website the content I'm showing in the

00:27:08   app like the the podcasts tour runs like

00:27:10   all that stuff and then also my support

00:27:12   which I mean I'm a bad example because I

00:27:15   don't really provide support I guess but

00:27:17   sure but for people who are who are

00:27:18   better people than me who provide

00:27:20   support how do you handle that question

00:27:21   yeah and so this is something that I was

00:27:23   actually it was the last topic I wanted

00:27:24   to touch on because I feel like it's

00:27:26   easy to think oh well then I have to

00:27:28   provide support in these languages and I

00:27:29   don't speak those languages and a you'll

00:27:33   get support in the native language of

00:27:35   your users either way and so sometimes

00:27:38   people who know who I am and know that

00:27:41   I'm based in the US and you know that I

00:27:43   speak English will email me in English

00:27:46   even though I know they're you know

00:27:48   they're they're German or they're French

00:27:49   or they're Spanish but generally you'll

00:27:51   just get emails from people who found

00:27:53   your app on the App Store to unload it

00:27:54   and have a question and they'll hit the

00:27:56   contact button if they can find it

00:27:58   because obviously it may if you if it's

00:28:01   caught if it's you know email us is the

00:28:03   button label they may not actually know

00:28:04   what that means

00:28:05   but maybe email is a fairly good term

00:28:07   but maybe that's a side point it's a

00:28:09   good idea to put a like a an icon on

00:28:12   that button either way but you get an

00:28:15   email and you those will happen either

00:28:16   way and so you don't I really wouldn't

00:28:19   worry about it too much and my

00:28:20   experience is I take that and this is a

00:28:23   an example where Google Translate is

00:28:25   your friend rather than in your in-app

00:28:27   translations you just take if you take

00:28:29   what they sent you and run it through

00:28:31   Google Translate it's usually good

00:28:33   enough that you can understand what

00:28:35   their what their the intent is

00:28:37   especially because customer support has

00:28:39   an by its nature is somewhat repetitive

00:28:42   like there's tend to be certain issues

00:28:44   that come up over and over again and so

00:28:45   you'll get an email and you run through

00:28:48   go translate you'll get a sense of what

00:28:50   they're saying and then when I just do

00:28:52   what I typically do is I'll respond

00:28:55   with I'll respond in English because

00:28:57   there's like ant right in a new language

00:28:59   so that's all I can do and then I'll

00:29:01   take that and run my response through

00:29:04   google translate I'm into the whatever

00:29:06   language they emailed me in and I put

00:29:09   that underneath my English transfer text

00:29:12   ends in it back and in the hopes that

00:29:14   the combination of if a speaks some

00:29:17   English and then having the Google

00:29:19   Translate rough translation they'll be

00:29:21   able to understand and I would say by

00:29:23   and large that works that people

00:29:25   understand that I don't speak that their

00:29:27   language that it's I don't know get a

00:29:29   lot of people upset about that or have

00:29:31   issues with that it kind of there's this

00:29:32   natural thing that I'm in English I'm an

00:29:34   American company I speak English and I'm

00:29:36   just doing the best I can and I think I

00:29:38   wouldn't worry about it beyond that I

00:29:40   think you might have converted me let's

00:29:42   see it I like to look forward to

00:29:43   launching overcast in German and seeing

00:29:46   all those nice big long strings okay I'm

00:29:49   not looking forward to testing that all

00:29:51   right thanks for listening everybody and

00:29:52   we will talk to you next week bye