itt 2014 - matt brenner- localization 2.0
TRANSCRIPT
![Page 1: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/1.jpg)
English370 million speakers
Español
390 milli
on speakers
Türkçe70 million speakers
Française
270 million speakers
中文1.1 billion speakers
العربية280 million speakers
Localization 2.0 Why? What? How? Pусский
160 million speakers
Istanbul Tech Talks – April 2014
![Page 2: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/2.jpg)
Matt Brenner, UnME2, FiveTongues (founder)mobile software localization
geolocation, Bluetooth
Started localization from scratchJ2ME, word processor, spreadsheet, e-mail
Immediate Results“Bongo” Nokia Ovi, multi-player Bluetooth (11 languages)
1.5 million downloads400k in Vietnam
Hooked on localization but... no good tools(so I built them myself)
![Page 3: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/3.jpg)
Informal PollPlease raise a hand if:
1. you develop or support a mobile app
2. not localized (1 language only)
3. localized into 2 languages
4. localized into 3+ languages
![Page 4: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/4.jpg)
Mobile Means Global
● no language known by more than 1 in 6 people
● < 50% of apps are localized
● < 10% of apps are localized into >2 languages
● thousands of new apps appear monthly...
![Page 5: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/5.jpg)
Apr '09 Jul '09 Oct '09 Apr '10 Oct '10 Apr '11 Oct '11 Apr '12 Oct '12 Apr '13 Oct '130
200,000
400,000
600,000
800,000
1,000,000
1,200,000
Oct '08 Apr '09 Oct '09 Apr '10 Oct '10 Apr '11 Oct '11 Apr '12 Oct '12 Apr '13 Oct '130
200,000
400,000
600,000
800,000
1,000,000
1,200,000
iTunes App Store (1million apps, 5 years old, +25,000/month)
Google Play (1.1million apps, 4 years old, +40,000/month)
Windows Phone (160 K apps, 3 years old, +3,000/month)
![Page 6: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/6.jpg)
why so little localization?
Zillions of apps
Global market (1.5 billion smartphones)
Simple idea
Enormous potential rewards
Question:
![Page 7: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/7.jpg)
Localization is Painful
● locating, vetting, paying translators● always a “few more phrases” to translate (translators get paid by the word)
Why?
Translation “Choke Points”:
Sorry, technology can't solve these problems.
![Page 8: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/8.jpg)
Localization is Painful
● ad hoc: much human intervention● Apple/Android/WP tools incomplete● process varies with platform (iOS / Android / Windows / Phone / HTML5, Firefox OS)● requires custom-coding● multiple translation cycles per release
Why?
Technology “Choke Points”:
Who bears these burdens? Developers
Technology can solve these problems.
![Page 9: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/9.jpg)
Costs of Localization
● translator fees (cost/word)● initial “internationalization”● managing translators
The apparent costs of translation:
The hidden costs of translation:● developer time spent:
● uploading phrase files● downloading/installing translation files● custom-coding translation features
![Page 10: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/10.jpg)
Localization 2.0 means:● cloud-based phrase repository
● automated upload/download/install
● identical tools/process across platforms (Android / iOS / JavaScript / Windows Phone)
● minimal impact on dev process
● automatic support for all language grammars (e.g. pluralization)
● zero-cost/effort to add target languages
Localization 2.0: seamless integration into development
![Page 11: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/11.jpg)
Technology
![Page 12: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/12.jpg)
● simple process, easy-to-use tools
● happy, efficient translators
● happy, efficient developers
● reduced cost
Benefits of Localization 2.0
Localization 2.0: seamless integration into development
![Page 13: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/13.jpg)
1. simple phrases2. phrases with elements not to translate3. phrases which change occasionally4. phrases containing variables5. phrases embedded in XML6. phrases embedded in HTML7. phrases only needed outside app
Phrase Categories
Localization 2.0 Phrase Categories:
![Page 14: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/14.jpg)
Phrase Categories
What would you like to do?Your image has been saved.OKYou've used this app for months, please send us money.
1. Simple Phrases
![Page 15: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/15.jpg)
Phrase Categories
Bongo challenges you by putting your skill and reflexes to the test!Bongo, yeteneklerinizi ve reflekslerinizi sınayarak size meydan okur!
Visit UnME2 at: unme2comBesuche UnME2, im Internet: unme2.com
Developed by Matt BrennerVon Matt Brenner entwickelt
2. Phrases With Elements Not to Xlate
![Page 16: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/16.jpg)
Phrase Categories
You are running version 1.3
3. Phrases Which Change Occasionally
![Page 17: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/17.jpg)
Phrase Categories
You have 10 points.Hey Sonia, you have 10 points.
4. Phrases Containing Variables
![Page 18: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/18.jpg)
Phrase Categories
<string name="tap_to_select">Tap items to Select</string>
5. Phrases Embedded in XML
Accessible from Android xml layout files as:
"@string/tap_to_select"
Accessible from Java source files as:
R.string.tap_to_select
![Page 19: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/19.jpg)
Phrase Categories
6. Phrases Embedded in HTML
<center><table border="0"><tr> <td align="center">
Developed by<font style='color: orange'>Matt Brenner</font><br>Version 1.0<br><hr>Visit UnME2, Inc. at: <a href="http://www.unme2com">unme2.com</a><br>See our: <a href="http://www.unme2.com/gottatxt/privacy.html">privacy policy</a><br>LangDemo © 2011-2013<br><br><font style="font-size: .75em;">Graphic design by Techark Solutions</font>
</td></tr></table></center>
![Page 20: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/20.jpg)
Phrase Categories
App store descriptionMarketing Materials
7. Phrases Only Needed Outside of App
![Page 21: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/21.jpg)
Present: User web-app LangDemo App
![Page 22: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/22.jpg)
Internationalizing Static Phrases● extract phrases from layout files
● extract phrases from menu files
● upload phrases/screen shots
Internationalizing Static Phrases
Observable result of localization: none
Localization 2.0: seamless integration into development
(internationalizing is the hardest step)
![Page 23: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/23.jpg)
● add Lang.jar to Eclipse Project (Java / Objective-C / C# / JavaScript)
● extract phrases from source files
● store phrases in repository
● build/install Language Packs
● use Lang class to fetch/format dynamic phrases
Internationalizing Dynamic Phrases
Localization 2.0: seamless integration into development
![Page 24: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/24.jpg)
Plug-in for Eclipse
● server builds language packs & strings.xml files directly from Eclipse
● downloads/installs language packs directly into Eclipse project
● creates all values-xx directories, installs strings.xml files
Localization 2.0: seamless integration into development
![Page 25: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/25.jpg)
● one static method: go
● go is simple yet powerful
● summons phrases in appropriate language
● fills in placeholders with run-time values
● and much more...
Lang Class
Localization 2.0: seamless integration into development
![Page 26: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/26.jpg)
Phrase Categories
Repository Phrase:What would you like to do?
Within App:text = Lang.go (Lang.GET, L.CHOOSE);
1. Simple Phrases Phrase: What would you like to do?
![Page 27: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/27.jpg)
Phrase Categories
Repository Phrase:{appname} puts your skill and reflexes to the test!
Define the variable at app startup:Lang.go (Lang.DEFINE, "appname", "Bongo");
Later:text = Lang.go (Lang.GET, L.SKILL_TEST);
2. Phrases With Elements Not to XlatePhrase: Bongo puts your skill and reflexes to the test!
![Page 28: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/28.jpg)
Phrase Categories
3. Phrases Which Change Occasionally
Repository Phrase: You are running version {version}
Define the variable at app startup:String ver = getPackageManager( )
.getPackageInfo(getPackageName( ), 0).versionCode;Lang.go (Lang.DEFINE, "version", ver);
Later:text = Lang.go (Lang.GET, L.SHOW_VERSION);
Phrase: You are running version 1.3
![Page 29: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/29.jpg)
Phrase Categories
4. Phrases Containing VariablesPhrase: Hey Sonia, you have 10 points.
Repository Phrase: Hey {1}, you have {2q 1|point| x|points|}.
In app:String name = ...;int points = ...;
text = Lang.go (Lang.GET, L.SCORE, name, points);
![Page 30: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/30.jpg)
Phrase Categories
<string name="tap_to_select">Tap items to Select</string>
5. Phrases Embedded in XML
Adding to Phrase Repository is Sufficient:
xml files can be automatcially generated
![Page 31: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/31.jpg)
Phrase Categories
6. Phrases Embedded in HTML
<center><table border="0"><tr> <td align="center">
Developed by<font style='color: orange'>Matt Brenner</font><br>Version 1.0<br><hr>Visit UnME2, Inc. at: <a href="http://www.unme2com">unme2.com</a><br>See our: <a href="http://www.unme2.com/gottatxt/privacy.html">privacy policy</a><br>LangDemo © 2011-2013<br><br><font style="font-size: .75em;">Graphic design by Techark Solutions</font>
</td></tr></table></center>
![Page 32: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/32.jpg)
Phrase Categories
6. Phrases Embedded in HTML
<center><table border="0"><tr> <td align="center">
{CREATED_BY}
{VERSION}<br><hr>{VISIT}<br>{SEE_OUR} {privacylink}<br>{appname} © 2011-2013<br><br><font style="font-size: .75em;">{DESIGN_BY}</font>
</td></tr></table></center>
Developed by {author}
Version {version}
Visit {corpname} at: {homelink}See our:
Graphic design by {graphics}
![Page 33: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/33.jpg)
Phrase Categories
6. Phrases Embedded in HTMLIn App:
Lang.go (Lang.DEFINE, "appname", "LangDemo");Lang.go (Lang.DEFINE, "author", "Matt Brenner");Lang.go (Lang.DEFINE, "corpname", "UnME2, Inc.");Lang.go (Lang.DEFINE, "homelink", "<a href=...);Lang.go (Lang.DEFINE, "privacylink",
"<a href=...>{PRIVACY_POLICY}</a>");Lang.go (Lang.DEFINE, "version", "1.0");Lang.go (Lang.DEFINE, "graphics", "Techark Solutions");
text = Lang.go (Lang.PROCESS_ASSET, “html/about.html, this);
![Page 34: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/34.jpg)
Phrase Categories
● Add phrases to repository● Adopt naming convention for Abstract Names
7. Phrases Only Needed Outside of App
![Page 35: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/35.jpg)
Lang class has many capabilities:
· GET · SET_LANGUAGE_TO_LOCALE· DEFINE · GET_CURRENT_LANGUAGE· PROCESS_ASSET · GET_LANGPACK_LOCALE· GET_DIRECTION · GET_LANGUAGE_LIST· SET_LANGUAGE · IS_LANGPACK_INSTALLED· EXPAND · LOOKUP_LANGUAGE_NAME· GET_PHONE_LOCALE
Localization 2.0: seamless integration into development
More Lang Class
![Page 36: ITT 2014 - Matt Brenner- Localization 2.0](https://reader031.vdocuments.net/reader031/viewer/2022021815/587717b81a28ab4c1d8b5a29/html5/thumbnails/36.jpg)
What must you do to add additional languages?
absolutely nothing!
Localization 2.0: seamless integration into development
Finally