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
◼
►
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
◼
►
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: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: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
◼
►
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: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