41: Internationalization
00:00:00
◼
►
Welcome to Under the Radar, a show about independent iOS app development.
00:00:03
◼
►
I'm Marco Arment.
00:00:04
◼
►
And I'm David Smith.
00:00:05
◼
►
Under the Radar is never longer than 30 minutes, so let's get started.
00:00:10
◼
►
So today we wanted to dive into the topic of localization, or some people call it internationalization,
00:00:17
◼
►
and some people think those are different.
00:00:18
◼
►
I don't really know, I just call it all localization, and that works for me.
00:00:22
◼
►
But more generally, we're talking about the concept of taking your application and making
00:00:25
◼
►
it, having its appearance and its strings and the things in it be adaptive based on
00:00:32
◼
►
where in the world your user is and what language they're speaking, and being adaptive in those
00:00:37
◼
►
kinds of ways.
00:00:39
◼
►
And generally this is kind of one of those things that I feel like it's a lot of times
00:00:46
◼
►
viewed as kind of like a hygiene thing, like in the sense of it's this thing that maybe
00:00:51
◼
►
you think you should do, but often you don't.
00:00:56
◼
►
For a long time, I had none of my applications localized at all, and it was always this thing
00:01:00
◼
►
that I'd go to the session at WWDC and kind of feel bad about myself and say, "Oh, this
00:01:04
◼
►
year I'll do it," and then I'd go back and I wouldn't actually do it.
00:01:08
◼
►
And I think it's a tricky one because unless you live in a multilingual or international
00:01:14
◼
►
life, you know, where if you speak two languages at home or you live abroad from where your
00:01:20
◼
►
native language is or something like that, it's not something that you would necessarily
00:01:25
◼
►
come across in your day-to-day life.
00:01:28
◼
►
And it's always hard, I think, to write features for an application that you yourself won't
00:01:34
◼
►
benefit from in using it.
00:01:36
◼
►
So when I make my app display all of its strings in German, that's great, but I don't speak
00:01:45
◼
►
German, so I have no idea if, A, if they're right, which we'll get into a bit later, and
00:01:51
◼
►
B, I don't feel that benefit.
00:01:54
◼
►
And so I've struggled for a long time to do it.
00:01:56
◼
►
And I'll certainly say it's a bit of a pain to do because if you want to do this, you
00:02:02
◼
►
have to structure a lot of the visual components of your application very differently.
00:02:07
◼
►
You have to make things very flexible, you can't hard-code a lot of values, everything
00:02:11
◼
►
has to be able to be switched in and out and adaptable depending on what language and locale
00:02:18
◼
►
your app is being used.
00:02:19
◼
►
But one day, I bit the bullet, and the first app I ever localized was Pedometer++, and
00:02:27
◼
►
I localized it and had a pretty impactful change as a result.
00:02:31
◼
►
I found that my downloads outside of English-speaking countries, so outside of the United States,
00:02:37
◼
►
Great Britain, Australia, New Zealand, Canada, Canada with an asterisk, because obviously
00:02:42
◼
►
they speak French there too, but outside of those countries, I found that my downloads
00:02:48
◼
►
went up by about three times.
00:02:51
◼
►
And overall, that meant that my overall sales didn't go up by three times, because most
00:02:55
◼
►
of my sales were still coming from English-speaking countries, but overall my sales did go up.
00:03:00
◼
►
I think it went up by about 50%, which was encouraging.
00:03:08
◼
►
And the effort it took to get there has certainly--it's debatable overall whether it was the right
00:03:15
◼
►
tradeoff, but I think in general it taught me the lesson that there is an impact to this,
00:03:18
◼
►
and it is something that we at least all need to consider.
00:03:22
◼
►
Because I've also had the flip side, where I've localized some of my other applications,
00:03:26
◼
►
and I've had essentially no increase.
00:03:28
◼
►
And so it's not like a silver bullet, it's not like if you localized your app, your sales
00:03:31
◼
►
would go up three times.
00:03:33
◼
►
That's definitely not the case.
00:03:35
◼
►
The experience I had in Podometer++ was by far the best I've had, but it's somewhat distinct
00:03:42
◼
►
from some of my other experiences.
00:03:45
◼
►
Have you ever localized any of your applications?
00:03:58
◼
►
I've had a lot of great jobs, and so I kind of know what's involved.
00:04:01
◼
►
And I know--I too have gone every year to the WWDC sessions about localization, and I
00:04:07
◼
►
too have sat there feeling bad about myself, thinking, "Why don't I just do this already?
00:04:11
◼
►
Let's just do it."
00:04:13
◼
►
But as you mentioned, it is not easy to do.
00:04:16
◼
►
And one of the biggest questions in my mind, which I hear people ask me all the time, is
00:04:22
◼
►
will this actually increase sales, and by how much?
00:04:24
◼
►
And as you said, a big increase for you in non-English speaking countries, that's great.
00:04:30
◼
►
However, it's hard to know.
00:04:32
◼
►
As you said, it's hard to know whether that will apply to my app or not.
00:04:36
◼
►
And it's hard to know how big the increase will be and then whether it will be worth
00:04:39
◼
►
But to me, I kind of see internationalization and localization--I also don't know the difference.
00:04:45
◼
►
I know there is one, and people get mad at us for not knowing it, but I don't know what
00:04:50
◼
►
I see them too as kind of a code hygiene thing, and it's kind of similar to accessibility
00:04:55
◼
►
in some ways, where if you make an interface accessible via the iOS accessibility mechanisms
00:05:02
◼
►
for things like voiceover and other assistive technologies, sometimes it takes a little
00:05:08
◼
►
bit more work in the coding and design stage, but it usually isn't that much more work to
00:05:13
◼
►
make it possible and to do it well.
00:05:18
◼
►
Usually it's actually very little work because Apple's stuff is so good.
00:05:20
◼
►
You just kind of have to be aware of it as you're coding.
00:05:23
◼
►
And there are certain aspects of internationalization that are that easy.
00:05:29
◼
►
Things like date formatting and stuff like that, like number formatting, currency formatting.
00:05:34
◼
►
In those kind of areas, Apple provides really easy APIs, date formatters, that kind of stuff,
00:05:40
◼
►
that if you just use them correctly at all, then you will just get nicely formatted things.
00:05:47
◼
►
Your strings won't be automatically translated to different languages, but things like displaying
00:05:52
◼
►
numbers and things like that, that's very easy to get right and to have kind of done
00:05:58
◼
►
for you automatically.
00:06:01
◼
►
In Overcast, I make extensive use of that kind of thing, and for the strings, I do wrap
00:06:07
◼
►
all of my UI strings in NSLocalizedString, which is this macro that you should look up
00:06:13
◼
►
NSLocalizedString if you don't know what it is.
00:06:14
◼
►
You should be using it.
00:06:16
◼
►
I do that for preparation for potential future internationalization efforts so that it's
00:06:23
◼
►
easy to see all my UI strings and easy to pull them out and have them translated in
00:06:29
◼
►
an automated kind of way if I ever need that.
00:06:33
◼
►
But I don't actually do that.
00:06:34
◼
►
I haven't actually translated it.
00:06:36
◼
►
So I have a few instances where I'm kind of abusing the formatters.
00:06:41
◼
►
In my list of episodes, I omit the year from the date from an episode's release date if
00:06:49
◼
►
it's the current year because I think that's just a nice little thing to get a little bit
00:06:53
◼
►
less clutter.
00:06:54
◼
►
If your episode was released on August 1st and that was two weeks ago, I don't need
00:06:59
◼
►
to know that it was 2016 because I already know it's 2016, thank you.
00:07:04
◼
►
And this works.
00:07:05
◼
►
There's no built-in function that I know of to do this very well.
00:07:10
◼
►
So I do kind of a hack which is I get the localized version of the current year and
00:07:15
◼
►
just remove that substring from the date string.
00:07:18
◼
►
And this turns out to be a really dumb implementation because in certain countries, there's a -- I
00:07:23
◼
►
forget exactly where it was.
00:07:24
◼
►
I think it was -- it might have been in a Portuguese-speaking country or a Spanish-speaking
00:07:28
◼
►
country but there was something where I got an email from users saying this is kind of
00:07:32
◼
►
weird looking because there's like -- there's a word between the day or the month and the
00:07:38
◼
►
year in the way it's formatted where it's like of or the.
00:07:42
◼
►
So it's like, you know, July of 2016, you know, whatever the translated version of that
00:07:48
◼
►
And so in my version of this, it just says, you know, 16th July of.
00:07:52
◼
►
>> That's not great.
00:07:53
◼
►
>> No, it's not great.
00:07:54
◼
►
So I have to probably revisit this strategy.
00:07:58
◼
►
But for the most part, everything else has been done only in the ways of like using the
00:08:04
◼
►
built-in formatters for numbers and dates and currencies and things but not actually
00:08:08
◼
►
translating the strings but making it easy to do so in the future if I want to.
00:08:12
◼
►
And I think the approach you're taking is certainly the one that is at the very least
00:08:17
◼
►
the right approach.
00:08:18
◼
►
That making -- as you're going -- as you're building an app, being aware that this might
00:08:23
◼
►
be something you want to do later, I think will certainly increase the likelihood that
00:08:26
◼
►
one day you will actually get to it rather than hitting the point where it's like, okay,
00:08:31
◼
►
I need to now like search in my app for every string that is being displayed and then add
00:08:39
◼
►
the NS localized string macro to it.
00:08:42
◼
►
Or I need to now go and switch everything over to using formatters.
00:08:47
◼
►
And I'm an iOS 10.
00:08:50
◼
►
I think there's the new units formatters, which are even -- take this even farther that
00:08:53
◼
►
you can now -- it's not even just dates and currency that you can do in numbers.
00:08:59
◼
►
You could -- you can even do clever things about speeds or distances.
00:09:03
◼
►
So like I run into this with a couple of my workout apps where, you know, it's how far
00:09:07
◼
►
did you run.
00:09:08
◼
►
And right now I do some things like where I need to be clever about which unit to use
00:09:14
◼
►
and have options in the application for switching that.
00:09:17
◼
►
You know, on first launch I'll see what country you're in.
00:09:22
◼
►
And I assume that if you're not in the United States you're probably going to use metric
00:09:26
◼
►
units, which in general I think is pretty much the case.
00:09:30
◼
►
And so I do those switches manually.
00:09:32
◼
►
And then, you know, iOS 10 I can do this automatically.
00:09:34
◼
►
But by and large it seems like in general a good idea to keep this as something that
00:09:39
◼
►
-- it's part of building an app properly.
00:09:42
◼
►
And just like you were saying with accessibility.
00:09:44
◼
►
Like if you build an app to do this, you're probably ultimately also going to be a better
00:09:48
◼
►
app because you're being thoughtful about what you're displaying to your user at a different
00:09:55
◼
►
And sometimes I run into situations where I'm just being lazy.
00:09:59
◼
►
And so I'll add some words of explanation for something.
00:10:04
◼
►
And in that case it's probably symptomatic of my app actually being too confusing and
00:10:11
◼
►
not obvious enough about how to operate it if I have to sort of build instructions into
00:10:16
◼
►
And if you're in a localization mindset, there's a cost to adding that string because now that
00:10:21
◼
►
gets added to your list of things that you need to translate and have localized.
00:10:26
◼
►
And so it's -- in some ways it helps you think about your application in a constructive way
00:10:31
◼
►
to make sure that if you couldn't read anything in this application, could you still use it?
00:10:37
◼
►
And if you can, that's probably a good indication that even if you can read the strings and
00:10:43
◼
►
the labels and things in your application, you know, it's still going to be a good experience.
00:10:48
◼
►
But by and large it's a funny thing because I think doing localizing just to have more
00:10:53
◼
►
downloads is I think a good reason.
00:10:55
◼
►
And I think in general for most people there is going to be -- it's very unlikely that
00:10:59
◼
►
you're going to have a negative correlation there.
00:11:02
◼
►
It would only be if you had a terrible translation and the app was actually worse after localizing
00:11:09
◼
►
But generally speaking I think, you know, having something that's more relevant to a
00:11:12
◼
►
customer by nature should increase that somewhat.
00:11:16
◼
►
But the other reason that I think is good to keep in mind when you're thinking about
00:11:20
◼
►
whether you should or shouldn't localize your application is in general I think Apple tends
00:11:25
◼
►
to only feature applications that are localized in the country's app store that they're doing
00:11:32
◼
►
the feature in.
00:11:34
◼
►
And so if you want to be featured in the Japanese app store, in the German app store, in the
00:11:38
◼
►
French app store, in the Spanish app store, you probably need to be localized into that
00:11:44
◼
►
country and probably at the very least have your screenshots and app store description
00:11:49
◼
►
localized and probably even your app as well.
00:11:53
◼
►
And that certainly is, again, it's just one of these opportunities that, you know, in
00:11:57
◼
►
-- as cutthroat of a market as the app store is, those little edges, those little things
00:12:03
◼
►
that in general localization isn't a mountain of work.
00:12:08
◼
►
It's something that you have to work on and it will lose you a day out of a point release
00:12:14
◼
►
kind of work.
00:12:16
◼
►
You will make -- it's hard to put your finger on exactly the impact that it's having, but
00:12:21
◼
►
I think it'll have an impact.
00:12:22
◼
►
And the reality is it's like it's a little advantage that you may as well take, that
00:12:28
◼
►
you may -- you know, it's something you can do directly and it's not like you have to
00:12:32
◼
►
think of this grand new innovative vision for something where you've come up with something
00:12:38
◼
►
totally new.
00:12:39
◼
►
Like you're just doing the basics better and maybe if your competitors aren't localized
00:12:44
◼
►
then you'll have that little edge on them.
00:12:46
◼
►
And especially I think a lot of app store algorithms, as best I can tell, have this
00:12:51
◼
►
kind of -- this built-in sense of as you get a little bit better there's a stronger benefit
00:12:58
◼
►
to the person in front, which is problematic in some ways, but in this case can be beneficial
00:13:03
◼
►
that if you can do lots of little things to be slightly better than your competitor, you're
00:13:07
◼
►
showing up higher in charts, you're more likely to be featured, you may show up higher in
00:13:12
◼
►
There's all these little things that can add up and this is just one of them.
00:13:14
◼
►
And so in general I'd say you should localize your app.
00:13:17
◼
►
And I mean I was actually looking at Overcast before your recording and it's a funny app
00:13:23
◼
►
because I think most of the app you could localize very easily because most of it is
00:13:28
◼
►
not -- it's content that's relevant to the user already.
00:13:31
◼
►
It's like it's self-localizing.
00:13:33
◼
►
If I'm in France listening to French podcasts you don't have to like translate the time
00:13:37
◼
►
title of the podcasts.
00:13:40
◼
►
All that is already there.
00:13:41
◼
►
It's just the surrounding infrastructure around it and even the names of the -- the name of
00:13:45
◼
►
the playlist, they're going to name the playlist whatever they want to name it.
00:13:49
◼
►
It's not like you have to do something clever there.
00:13:51
◼
►
It's just some other labels.
00:13:52
◼
►
And so it's probably something worth doing.
00:13:55
◼
►
>> KEVIN: Yeah, I mean, and also beyond like selfish reasons of this will get more downloads,
00:14:01
◼
►
which are very important, beyond that though a lot of people -- if you don't localize,
00:14:07
◼
►
and I know this from the experience of having apps that I haven't localized, if you don't
00:14:11
◼
►
localize a lot of people who don't speak your language will still use the app anyway.
00:14:16
◼
►
They'll just fumble through.
00:14:17
◼
►
Like they'll just -- you know, because like a lot of times like there might not be any
00:14:20
◼
►
other apps to do the thing or they might have heard about yours and yours might be the best
00:14:24
◼
►
one or they just might want to try yours or whatever the reason.
00:14:27
◼
►
A lot of people who don't speak the language of your app will try to use it regardless.
00:14:32
◼
►
And so it's really a design question of like do you want the experience of using your app
00:14:38
◼
►
to be better for people who don't speak the language that it's in?
00:14:40
◼
►
Do you want them to be able to use it?
00:14:44
◼
►
Do you want to be able to provide value to people who don't speak your language?
00:14:46
◼
►
And to some degree, as you said, if you look at Overcast, I've taken a lot of this to heart
00:14:51
◼
►
where I try to basically avoid a lot of text where possible.
00:14:56
◼
►
But just avoiding the need for text and translation will get you a lot of the way there and will
00:15:02
◼
►
let people try to kind of figure out and fumble through more easily.
00:15:07
◼
►
Like I mean I see even like with games, like my four-year-old son can't read yet but he
00:15:12
◼
►
knows how to play a lot of games on his iPad because they don't rely so much on text.
00:15:16
◼
►
They just have buttons and icons and things and he's able to figure those out.
00:15:22
◼
►
The more your app cannot rely on text, the better.
00:15:24
◼
►
But for the text that it does rely on, you're doing a great service to the design and experience
00:15:31
◼
►
of a lot of real-world users by localizing because people who don't speak your language
00:15:36
◼
►
are going to try to use it anyway.
00:15:38
◼
►
But anyway, in the case of Overcast though, I am also a little bit scared of a number
00:15:43
◼
►
of issues that we'll probably get to in the second half of the show.
00:15:44
◼
►
But like I mean little things like what you mentioned, the UI design, like there are so
00:15:49
◼
►
many features and labels in the interface where like I've chosen the words extremely
00:15:55
◼
►
carefully and like I will choose the name of a feature based on what will fit in the
00:16:02
◼
►
table view cell in the settings screen.
00:16:04
◼
►
Like I will often like make decisions about like exactly what words this has to be based
00:16:10
◼
►
on like what will fit.
00:16:11
◼
►
And I know that if I localize everything, it will add a lot of overhead to a lot of
00:16:18
◼
►
the testing and the validation of the UI and everything on different sized devices especially
00:16:23
◼
►
and some of that we can automate, some of it we can't.
00:16:26
◼
►
But also it will be very easy for my app to be misunderstood.
00:16:32
◼
►
But I guess this is kind of the perfect being the enemy of the good.
00:16:34
◼
►
Like right now my app is being understood even worse by people who don't speak my language.
00:16:39
◼
►
So I guess maybe that's just a cost I'd have to bear.
00:16:43
◼
►
Yeah well before we continue on that front, we are brought to you this week by Cococonf.
00:16:49
◼
►
Now this upcoming March 20th through 23rd, Cococonf is returning to Yosemite National
00:16:54
◼
►
Park for its third Yosemite event and let me tell you people, I have heard so many great
00:16:59
◼
►
things about this.
00:17:00
◼
►
I'm going to try to go this year I think because I've heard so many great things about it and
00:17:02
◼
►
I keep having scheduling problems and I can't go but I wish I can go to this event.
00:17:06
◼
►
I think I'm going to try to make it work this year, we'll see.
00:17:08
◼
►
Anyway this event, March 20th through 23rd, held again at the Yosemite Lodge at the Falls
00:17:14
◼
►
in Yosemite National Park.
00:17:15
◼
►
Speakers include Ashley Nelson Hornstein, friend of the show David Smith, Andy Anako, Matt
00:17:20
◼
►
Drance, Jamie Newberry, Brent Simmons and Daniel Steinberg.
00:17:23
◼
►
Sessions run in the mornings and evenings and afternoons are spent exploring Yosemite
00:17:27
◼
►
National Park with activities including ranger led hikes, a bus tour of the valley, a photo
00:17:33
◼
►
walk by TED photographer James Duncan Davidson.
00:17:35
◼
►
These are all great options for you to choose if you want to.
00:17:37
◼
►
There's also music by James Dempsey and the Breakpoints and by Jonathan "Songaday" Mann
00:17:43
◼
►
and you can use code "under theradar" to save 20% on your tickets to Yosemite.
00:17:47
◼
►
So head on over to cococonf.com/yosemite to register.
00:17:51
◼
►
David you'll be there obviously because you're speaking, I really hope to be there, looks
00:17:54
◼
►
to be a great conference and thanks a lot to CocoConf for sponsoring our show once again.
00:17:59
◼
►
So to pick back up what you were talking about, I think there is a fundamental thing and I
00:18:04
◼
►
think for the rest of the show we'll kind of dive into a bit of the mechanics of what
00:18:08
◼
►
localization is, that once you finally decide it's something that you're going to do.
00:18:13
◼
►
I think you kind of have to let go a little bit on perfection in order to approach this
00:18:21
◼
►
because just fundamentally the width of words in languages is just mind-bendingly different
00:18:31
◼
►
between languages.
00:18:32
◼
►
The classic example is something like German which tends to have these very long words
00:18:37
◼
►
for relatively simple concepts.
00:18:40
◼
►
You go all the way to some of the more Asian languages where you'll have a single one-character
00:18:45
◼
►
symbol as the equivalent of what's being said there.
00:18:48
◼
►
And so you'll never have, I know the feeling of what you're talking about where you want
00:18:52
◼
►
to have just that perfect word that makes everything line up nicely or it gives you
00:18:59
◼
►
a good balance to the screen.
00:19:03
◼
►
And when you're localizing, you just at a certain point have to say, "It's going to
00:19:07
◼
►
be impossible."
00:19:08
◼
►
And I'd rather it be understandable than visually perfect.
00:19:16
◼
►
And maybe there's a way that if you were really a linguistic genius that you could find different
00:19:20
◼
►
words that are more appropriate or might convey the same meaning but have a more similar length,
00:19:27
◼
►
maybe that's possible.
00:19:28
◼
►
But I think I've just had to accept that going down this road is probably better because
00:19:34
◼
►
not doing it, it's like having something that looks visually slightly less balanced perhaps
00:19:40
◼
►
is going to be better than something that looks balanced but is unintelligible.
00:19:46
◼
►
So when you're localizing something, I think there's probably, I think briefly I'll just
00:19:51
◼
►
say there's two things that you're sort of typically doing.
00:19:53
◼
►
You're localizing the language, so I'm an English speaker, that's the only language that
00:19:59
◼
►
I really can speak with any fluency, and so I write my applications in English as a result.
00:20:07
◼
►
And I can take all the English words and translate them into another language.
00:20:13
◼
►
And then there's the more cultural differences, and this can both be things like we were saying
00:20:18
◼
►
with units, so metric versus imperial units or date formats, or even getting into differences
00:20:25
◼
►
within a language.
00:20:26
◼
►
So for example, we spell the word "color" differently in the United States than they
00:20:30
◼
►
do in Great Britain.
00:20:32
◼
►
And so you can get into those kind of cultural differences.
00:20:34
◼
►
But we're right.
00:20:35
◼
►
Of course we are.
00:20:36
◼
►
You don't need that U. That U is completely unnecessary.
00:20:40
◼
►
And that's the way it is.
00:20:41
◼
►
UIColor doesn't have a U in it, so for the way I'm working on iOS.
00:20:47
◼
►
So you can do those two different things that you can be localizing.
00:20:51
◼
►
And in general, the more cultural ones are a lot of the things that you're probably going
00:20:56
◼
►
to want to lean on Apple for, for their date formatters and unit formatters and number
00:21:03
◼
►
And the language ones is probably what I'll talk mostly about now, because that's what
00:21:06
◼
►
most people think of localization.
00:21:07
◼
►
I think that's what we think of.
00:21:08
◼
►
And that's taking all of the strings that are displayed in your application and wrapping
00:21:13
◼
►
them up in NSLocalizedString macros.
00:21:17
◼
►
And I don't actually know how you do this in Swift, but I'm sure there's something similar
00:21:23
◼
►
But it's probably not called NSLocalizedString.
00:21:26
◼
►
But there's something I'm sure that can translate back and forth.
00:21:29
◼
►
And you run a little script that pulls all those out of your application.
00:21:33
◼
►
And you end up with this little configuration file that's basically just a string and then
00:21:38
◼
►
a translation.
00:21:40
◼
►
And you can take that file and send it to a translation service.
00:21:44
◼
►
There's many of these.
00:21:45
◼
►
I've used a bunch of them.
00:21:46
◼
►
In general, I'm sure there maybe are some differences, but by and large, I've used a
00:21:51
◼
►
couple and they've all been about the same.
00:21:53
◼
►
At this point in iOS development, I think the tools are mature enough that any of these
00:22:00
◼
►
-- and I think Apple even has a website where they recommend a bunch of them -- you just
00:22:04
◼
►
take your strings file, you send it to them, and they'll have a translator translate it
00:22:09
◼
►
One thing you want to do there is in NSLocalizedString, you give both the string you want to translate
00:22:13
◼
►
and you can have a little comments field.
00:22:16
◼
►
And it's very strongly recommended that you put something useful in that comments field,
00:22:19
◼
►
not just the same string again or leaving it blank.
00:22:22
◼
►
Because you want to give the translator a sense of what the string actually means in
00:22:29
◼
►
I know some translation services also even request that you send screenshots of your
00:22:33
◼
►
application to the translator so they can see what it looks like in context.
00:22:37
◼
►
So they're going to translate it and send it back to you.
00:22:39
◼
►
Or something you can also do is ask a friend or a colleague.
00:22:42
◼
►
I've started actually doing this a few times, especially when I'm doing small translation
00:22:47
◼
►
I'll just ask on Twitter, "Hey..."
00:22:49
◼
►
I'll make a little Google form and say, "Hey, here's this one string that I need for a point
00:22:55
◼
►
If you speak any of the languages that my app's translated in, which I think right now
00:22:59
◼
►
is German, Spanish, French, Russian, Chinese, Japanese, and Korean, I think are the ones
00:23:05
◼
►
that I use typically, maybe Portuguese.
00:23:09
◼
►
If you speak any of those languages, translate it.
00:23:11
◼
►
Obviously that's nice for me because I have a large enough audience that I can find someone
00:23:16
◼
►
who speaks one of those languages.
00:23:19
◼
►
But otherwise just use a translation service and it's the same.
00:23:21
◼
►
I will say generally what you want is somebody who is native to the target language but fluent
00:23:29
◼
►
in yours, not vice versa.
00:23:32
◼
►
If you come up with somebody who grew up speaking English but learned a bit of French in high
00:23:37
◼
►
school, ideally you want a French person to do the translation for you instead who just
00:23:43
◼
►
knows enough English to understand what you're trying to say.
00:23:48
◼
►
Because a native speaker, there's a lot of differences and nuance to these languages,
00:23:52
◼
►
to any language, and ideally you want a native speaker.
00:23:57
◼
►
And I've run into this a few times with translation services in an ideal way, and this is why
00:24:03
◼
►
I've actually started leaning more on asking friends and people I know who speak the languages
00:24:08
◼
►
that I'm translating into, is if someone who actually uses your application on a regular
00:24:13
◼
►
basis will have a better translation.
00:24:16
◼
►
Because I've definitely had a thing where they say the word you're using here is the
00:24:21
◼
►
It's not like you messed up the translation.
00:24:24
◼
►
But the way in which they're using it is different than what a typical person would expect it
00:24:29
◼
►
to be said as.
00:24:32
◼
►
And I will raise my hand and confess that I have used Google Translate a few times.
00:24:39
◼
►
>> COREY: Oh, don't do that.
00:24:40
◼
►
>> BRIAN: When I was trying to rush out an update, and I didn't--usually this is the
00:24:44
◼
►
problem with localization, is once you do it, you kind of have to keep doing it.
00:24:47
◼
►
If you make a small change that adds a string or changes a string, it's like, "Oh, I don't
00:24:51
◼
►
want to have to go through a translation service or go through a big process."
00:24:54
◼
►
So I always just go to Google Translate and did a few translations.
00:24:58
◼
►
And it's a train wreck.
00:25:00
◼
►
I've done it, and I've lived to tell the tale, but I would not recommend it.
00:25:05
◼
►
It is definitely not something--you'll get some very strange customer support emails
00:25:10
◼
►
where they're just like, "So, I don't know how to say this best, but the person who did
00:25:17
◼
►
your translation didn't really translate it so much as turned it into unintelligible gibberish."
00:25:24
◼
►
And so, avoid that.
00:25:27
◼
►
If you're just wanting to have a placeholder there, a much better placeholder is in Xcode,
00:25:32
◼
►
you can launch your application with a pseudo-language, which is designed to test your layout, and
00:25:38
◼
►
so things are really long and have to use different character sets and things.
00:25:42
◼
►
If you want to just have something there to test, validate your layout with, use that.
00:25:49
◼
►
Don't use Google Translate.
00:25:50
◼
►
I made a mistake.
00:25:51
◼
►
But then, yeah, you just go through that, you end up with the strings back, you put
00:25:54
◼
►
them back into your application, and now your application, when you launch it, will be in
00:25:58
◼
►
the new language.
00:25:59
◼
►
And it's kind of cool the first time you launch your application and you don't understand
00:26:03
◼
►
any of the text.
00:26:06
◼
►
It's kind of a strange feeling, but it's kind of cool.
00:26:08
◼
►
And then you have an app that is localized.
00:26:10
◼
►
And as you go, as you make changes, you just need to keep track of the differences, the
00:26:15
◼
►
new strings, or if you make changes to strings.
00:26:20
◼
►
And your app's localized.
00:26:21
◼
►
And I don't know if that's anything more on that process.
00:26:24
◼
►
Apple has gotten the toolset to, at this point, be pretty good.
00:26:30
◼
►
There was a time, I think earlier, when I looked into localization back in iOS 3 or
00:26:36
◼
►
4 days, and it was much more manual and much more cumbersome.
00:26:40
◼
►
But in general now, you just kind of run the few scripts, it pulls it out, you send those
00:26:44
◼
►
off-shore translation service, you get them back, you put them back in, and you're up
00:26:50
◼
►
and running.
00:26:51
◼
►
- So, how do you handle the issue of other language support?
00:26:56
◼
►
If people who don't speak your language email you for technical support.
00:27:00
◼
►
'Cause that's always been my concern with localizing my stuff, is like, well, even if
00:27:03
◼
►
I localized the whole app, am I also gonna localize the whole website, the content I'm
00:27:08
◼
►
showing in the app, the podcast storefronts, all that stuff, and then also my support,
00:27:13
◼
►
which I'm a bad example, 'cause I don't really provide support, I guess.
00:27:17
◼
►
But for people who are better people than me, who provide support, how do you handle
00:27:21
◼
►
that question?
00:27:22
◼
►
- Yeah, and so this is something that actually was the last topic I wanted to touch on, because
00:27:25
◼
►
I feel like it's easy to think, oh, well, then I have to provide support in these languages,
00:27:29
◼
►
and I don't speak those languages.
00:27:31
◼
►
And A, you'll get support in the native language of your users, either way.
00:27:37
◼
►
And so sometimes people who know who I am and know that I'm based in the US and that
00:27:43
◼
►
I speak English will email me in English, even though I know they're German or they're
00:27:49
◼
►
French or they're Spanish.
00:27:50
◼
►
But generally, you'll just get emails from people who found your app on the app store,
00:27:54
◼
►
downloaded it, and have a question, and they'll hit the contact button if they can find it.
00:27:59
◼
►
Because obviously it may, if it's email us is the button label, they may not actually
00:28:04
◼
►
know what that means, but maybe email is a fairly good term, but maybe as a side point,
00:28:09
◼
►
it's a good idea to put an icon on that button, either way.
00:28:14
◼
►
But you get an email, and those will happen either way.
00:28:17
◼
►
And so I really wouldn't worry about it too much.
00:28:20
◼
►
And my experience is I take that, and this is an example where Google Translate is your
00:28:25
◼
►
friend rather than in your in-app translations.
00:28:29
◼
►
If you take what they sent you and run it through Google Translate, it's usually good
00:28:32
◼
►
enough that you can understand what the intent is, especially because customer support by
00:28:40
◼
►
its nature is somewhat repetitive.
00:28:42
◼
►
There tend to be certain issues that come up over and over again.
00:28:45
◼
►
And so you'll get an email and you run it through Google Translate, you'll get a sense
00:28:49
◼
►
of what they're saying.
00:28:51
◼
►
And then what I typically do is I'll respond in English, because I can't write in a new
00:28:59
◼
►
language, so that's all I can do.
00:29:01
◼
►
And then I'll take that and run my response through Google Translate into whatever language
00:29:07
◼
►
they emailed me in, and I put that underneath my English text and send it back, in the hopes
00:29:14
◼
►
that the combination of if they speak some English and then having the Google Translate
00:29:19
◼
►
rough translation, they'll be able to understand.
00:29:22
◼
►
And I would say by and large, that works.
00:29:24
◼
►
That people understand that I don't speak their language, that I don't get a lot of
00:29:29
◼
►
people upset about that or have issues with that.
00:29:31
◼
►
There's this natural thing that I'm an American company, I speak English, and I'm
00:29:36
◼
►
just doing the best I can.
00:29:38
◼
►
And I think I wouldn't worry about it beyond that.
00:29:40
◼
►
I think you might have converted me.
00:29:42
◼
►
Let's see it.
00:29:43
◼
►
I look forward to launching Overcast in German and seeing all those nice big long strings.
00:29:48
◼
►
Oh man, I'm not looking forward to testing that.
00:29:50
◼
►
All right, thanks for listening everybody, and we will talk to you next week.
00:29:55
◼
►
[BLANK_AUDIO]