36
English 370 million speakers Español 390 million speakers Türkçe 70 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

ITT 2014 - Matt Brenner- Localization 2.0

Embed Size (px)

Citation preview

Page 1: ITT 2014 - Matt Brenner- Localization 2.0

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

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

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

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

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

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

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

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

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

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

Technology

Page 12: ITT 2014 - Matt Brenner- Localization 2.0

● 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

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

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

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

Phrase Categories

You are running version 1.3

3. Phrases Which Change Occasionally

Page 17: ITT 2014 - Matt Brenner- Localization 2.0

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

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

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 &copy; 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

Phrase Categories

App store descriptionMarketing Materials

7. Phrases Only Needed Outside of App

Page 21: ITT 2014 - Matt Brenner- Localization 2.0

Present: User web-app LangDemo App

Page 22: ITT 2014 - Matt Brenner- Localization 2.0

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

● 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

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

● 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

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

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

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

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

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

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 &copy; 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

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} &copy; 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

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

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

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

What must you do to add additional languages?

absolutely nothing!

Localization 2.0: seamless integration into development

Finally