ITT 2014 - Matt Brenner- Localization 2.0

Preview:

Citation preview

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

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)

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

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...

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)

why so little localization?

Zillions of apps

Global market (1.5 billion smartphones)

Simple idea

Enormous potential rewards

Question:

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.

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.

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

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

Technology

● 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

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:

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

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

Phrase Categories

You are running version 1.3

3. Phrases Which Change Occasionally

Phrase Categories

You have 10 points.Hey Sonia, you have 10 points.

4. Phrases Containing Variables

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

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>

Phrase Categories

App store descriptionMarketing Materials

7. Phrases Only Needed Outside of App

Present: User web-app LangDemo App

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)

● 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

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

● 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

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?

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!

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

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);

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

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>

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}

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);

Phrase Categories

● Add phrases to repository● Adopt naming convention for Abstract Names

7. Phrases Only Needed Outside of App

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

What must you do to add additional languages?

absolutely nothing!

Localization 2.0: seamless integration into development

Finally

Recommended