Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ITT 2014 - Matt Brenner- Localization 2.0

ITT 2014 - Matt Brenner- Localization 2.0

What developers want is localization which is uniform across platforms (Android, iOS, Windows Phone, HTML/5), fully supports static and dynamic phrases, eliminates mixing and matching file types, and integrates seamlessly (largely transparently) into the development process. Welcome to Localization 2.0, the next generation. If you have already undertaken localization, this talk will show you the benefits of Localization 2.0 and how to achieve them. If you haven't begun localization, learn how to avoid the costly shortcomings of outdated localization approaches.

Istanbul Tech Talks

May 13, 2014
Tweet

More Decks by Istanbul Tech Talks

Other Decks in Programming

Transcript

  1. 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
  2. Matt Brenner, UnME2, FiveTongues (founder) mobile software localization geolocation, Bluetooth

    Started localization from scratch J2ME, word processor, spreadsheet, e-mail Immediate Results “Bongo” Nokia Ovi, multi-player Bluetooth (11 languages) 1.5 million downloads 400k in Vietnam Hooked on localization but... no good tools (so I built them myself)
  3. Informal Poll Please 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
  4. 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...
  5. Apr '09 Jul '09 Oct '09 Apr '10 Oct '10

    Apr '11 Oct '11 Apr '12 Oct '12 Apr '13 Oct '13 0 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 '13 0 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)
  6. why so little localization? Zillions of apps Global market (1.5

    billion smartphones) Simple idea Enormous potential rewards Question:
  7. 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.
  8. 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.
  9. 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
  10. 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
  11. • 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
  12. 1. simple phrases 2. phrases with elements not to translate

    3. phrases which change occasionally 4. phrases containing variables 5. phrases embedded in XML 6. phrases embedded in HTML 7. phrases only needed outside app Phrase Categories Localization 2.0 Phrase Categories:
  13. Phrase Categories What would you like to do? Your image

    has been saved. OK You've used this app for months, please send us money. 1. Simple Phrases
  14. 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: unme2com Besuche UnME2, im Internet: unme2.com Developed by Matt Brenner Von Matt Brenner entwickelt 2. Phrases With Elements Not to Xlate
  15. Phrase Categories You have 10 points. Hey Sonia, you have

    10 points. 4. Phrases Containing Variables
  16. 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
  17. 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>
  18. 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)
  19. • 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
  20. 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
  21. • 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
  22. 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?
  23. 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 Xlate Phrase: Bongo puts your skill and reflexes to the test!
  24. 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
  25. Phrase Categories 4. Phrases Containing Variables Phrase: 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);
  26. 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
  27. 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>
  28. 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}
  29. Phrase Categories 6. Phrases Embedded in HTML In 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);
  30. Phrase Categories • Add phrases to repository • Adopt naming

    convention for Abstract Names 7. Phrases Only Needed Outside of App
  31. 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
  32. What must you do to add additional languages? absolutely nothing!

    Localization 2.0: seamless integration into development Finally