PodSearch

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