Save 37% off PRO during our Black Friday Sale! »

A Whole New World: Taking your app global and living to tell the tale

A Whole New World: Taking your app global and living to tell the tale

A talk I gave at the Wix Meetup in Haifa on Feb 11th 2019.
---

So you’ve launched your first service and all your customers in the US love it - great!
Now comes the hard part - how do you make the entire world love it too.

In this talk, I’m going to share what from my experience building the PayPal Mobile app and expanding WeWork’s systems to span the globe.
I’m going to cover it all: from encodings, translations, UGC, CATs, i18n, g11n, l10n, LQA, money, dates, names, and taxes.
So that you can expand your app and reach new customers in London, Beijing, Tel-Aviv, and Paris.

2f7eb8e439ce2d288dcfa240b5210664?s=128

Yonatan Bergman

February 11, 2019
Tweet

Transcript

  1. @yonbergman A WHOLE NEW WORLD Taking your app global and

    living to tell the tale @yonbergman
  2. None
  3. @yonbergman @yonbergman YON BERGMAN Director of Engineering
 @ WeWork Technology

  4. t e c h n o l o g y

    @yonbergman
  5. 9:41

  6. @yonbergman

  7. @yonbergman

  8. @yonbergman YOUR AWESOME APP LOG IN

  9. @yonbergman YOUR AWESOME APP LOG IN ה א פ ל

    י ק צ י ה ה מ ד ל י ק ה ש ל כ ם ה ת ח ב ר ఍፥༉ ଫአ ጭ୯ Ihre ehrfürchtige APP Einloggen
  10. @yonbergman English – 25.3% Chinese – 19.8% Spanish – 8%

    Arabic – 4.8% Portuguese – 4.1% Indonesian/Malaysian – 4.1% Japanese – 3% Russian – 2.8% French – 2.8% German – 2.2%
 Most common languages used on the internet as of December 2017, by share of internet users
  11. @yonbergman YOUR AWESOME APP LOG IN YOUR AWESOME APP LOG

    IN
  12. @yonbergman 56.2 percent of consumers say that the ability to

    obtain information 
 in their own language is more important than price. 95 percent of Chinese online consumers indicate greater comfort level 
 with websites in their language. 90 percent of Europeans never browse in a language other than their own, And 42 percent won’t buy a product if the description is not in their language.
  13. @yonbergman App downloads forecast in billions (2017-2022)

  14. @yonbergman G11N, I18N, L10N ENCODINGS, UTF8, EMOJIs LOCALES FORMATS, CLDR

    TRANSLATIONS, CATs REGIONALIZATION CASH, CURRENCIES LQA @yonbergman
  15. @yonbergman _G11N

  16. @yonbergman _GLOBALIZATION

  17. @yonbergman _I18N

  18. @yonbergman _INTERNATIONALIZATION is the design and development of a product,

    application or document content that enables easy localization for target audiences that vary in culture, region, or language.
  19. @yonbergman _L10N

  20. @yonbergman _LOCALIZATION refers to the adaptation of a product, application

    or document content to meet the language, cultural and other requirements of a specific target market (a "locale")
  21. @yonbergman _LOCALIZATION Interfaces, forms and formats, names, dates, currencies, RTL,

    symbols
  22. @yonbergman _LOCALIZATION Japan Interfaces, forms and formats, names, dates, currencies,

    RTL, symbols
  23. @yonbergman I18N + L10N _GLOBALIZATION

  24. @yonbergman I18N L10N

  25. @yonbergman G11N I18N L10N

  26. @yonbergman _ENCODINGS

  27. @yonbergman _ASCII or the American Standard Code for Information Interchange.

    7 bit character encoding standard. 1960
  28. @yonbergman _EASCII Extended ASCII with 8 bit support for standard

    ASCII + more characters
 
 Windows CP 1255 IBM CP 916
  29. @yonbergman _UNICODE i s a c o m p u

    t i n g i n d u s t r y s t a n d a rd fo r t h e consistent encoding, representation, and handling of text expressed in most of the world's writing systems. 
 + Emoji
  30. @yonbergman _UTF8/16 Variable width character encoding supporting all 1,112,064 valid

    code points in Unicode
  31. @yonbergman _ CANONICAL NORMALIZATION é can be written as either

    “é”, which is a “precomposed character,” or as “é”, which is a combination of “e” and “ ́ ”.
 String.unicode_normalize()
  32. @yonbergman _LOCALES

  33. @yonbergman _LOCALES user's language, region and any special variant preferences

    that the user wants to see in their user interface.
  34. @yonbergman _ BCP47 Tags for Identifying Languages. “Human beings on

    our planet have, past and present, used a number of languages. There are many reasons why one would want to identify the language used when presenting or requesting information.“
  35. @yonbergman en
 en-US en-GB
 en-CA ! "

  36. @yonbergman # en
 en-US en-GB
 en-CA es
 es-ES es-MX
 es-BR

    es-419 ! " $ %
  37. @yonbergman # en
 en-US en-GB
 en-CA es
 es-ES es-MX
 es-BR

    es-419 fr
 fr-FR fr-CA ! " $ % & '
  38. @yonbergman # en
 en-US en-GB
 en-CA es
 es-ES es-MX
 es-BR

    es-419 fr
 fr-FR fr-CA he
 he-IL ! " $ % & ' (
  39. @yonbergman zh
 zh-Hans zh-Hans-CN
 zh-Hans-HK zh
 zh-Hant zh-Hant-CN
 zh-Hant-HK )

  40. @yonbergman _ DETECT Can be done automatically using the Accept-Language

    header. Can support fallback languages. Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
  41. @yonbergman _ DETECT Can be done automatically using the Accept-Language

    header. Can support fallback languages. 
 Best Practice: Let users choose
  42. @yonbergman _FORMATTING

  43. @yonbergman _FORMATTING Formatters translate between binary data and human- readable

    textual representations of these values.
  44. @yonbergman Dates Times Timezones Numbers Currencies

  45. @yonbergman B – big-endian (year, month, day), e.g. 
 1996-04-22

    or 1996/04/22 or 1996 April 22 
 L – little-endian (day, month, year), e.g. 
 22.04.1996 or 22/4/1996 or 22 April 1996 
 M – middle-endian (month, day, year), e.g. 
 04/22/1996 or April 22, 1996 _DATE FORMATS
  46. @yonbergman 1996-04-22 _ ISO 8601

  47. @yonbergman _CLDR building blocks for software to support the world's

    languages, with the largest and most extensive standard repository of locale data available
  48. @yonbergman _CLDR building blocks for software to support the world's

    languages, with the largest and most extensive standard repository of locale data available
  49. @yonbergman _ICU International Components For Unicode JAVA & C++ Twitter-CLDR

    RUBY & JAVASCRIPT "{gender_of_host, select, " "female {" "{num_guests, plural, offset:1 " "=0 {{host} does not give a party.}" "=1 {{host} invites {guest} to her pa "=2 {{host} invites {guest} and one o "other {{host} invites {guest} and # "male {" "{num_guests, plural, offset:1 " "=0 {{host} does not give a party.}" "=1 {{host} invites {guest} to his pa "=2 {{host} invites {guest} and one o "other {{host} invites {guest} and # "other {" "{num_guests, plural, offset:1 " "=0 {{host} does not give a party.}" "=1 {{host} invites {guest} to their "=2 {{host} invites {guest} and one o "other {{host} invites {guest} and #
  50. @yonbergman _TRANSLATIONS

  51. @yonbergman _FORMAT.JS FormatJS is a modular collection of JavaScript libraries

    for internationalization that are focused on formatting numbers, dates, and strings for displaying to people. Made by Yahoo React-INTL
  52. @yonbergman _ECMASCRIPT INTL API Intl.js - Polyfill

  53. @yonbergman _TRANSLATE UI var messages = { en: { GREETING:

    'Hello {name}' }, fr: { GREETING: 'Bonjour {name}' } };
  54. @yonbergman _TRANSLATE UI ReactDOM.render( <IntlProvider locale="en"> <App /> </IntlProvider>, document.getElementById('container')

    );
  55. @yonbergman _TRANSLATE UI <FormattedMessage id="welcome" defaultMessage={`Hello {name}`} values={{name: <b>{name}</b>}} />

  56. @yonbergman _TRANSLATE UI <FormattedNumber style=“currency" currency=“ils" value=3500 />

  57. @yonbergman _ECO-SYSTEM babel-plugin-react-intl

  58. @yonbergman _TRANSLATE UI var messages = { en: { GREETING:

    'Hello {name}' }, fr: { GREETING: 'Bonjour {name}' } };
  59. @yonbergman _CAT Computer Assisted Translation tools help translators by supporting

    the process, p rov i d i n g a t ra n s l a t i o n memory, term-base and machine learning translations
  60. @yonbergman _UGC User generated content.

  61. @yonbergman _RTL

  62. @yonbergman _RTL

  63. @yonbergman _MONEY

  64. @yonbergman _MONEY VALUE $3.50

  65. @yonbergman _MONEY VALUE $ 3.50 CURRENCY AMOUNT

  66. @yonbergman _CURRENCIES $ € £ ¥ ₪ ₹ ₩ ₱

    ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ Currency Code (3 Letter - ISO 4217) Name Subunit Name Exponent Symbol *
  67. @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

    ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ _CURRENCIES Currency Code Name Subunit Name Exponent Symbol * USD US Dollar Cent 2 [1/100] $
  68. @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

    ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ _CURRENCIES Currency Code Name Subunit Name Exponent Symbol * ILS Israeli Shekel Agora 2 [1/100] ₪
  69. @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

    ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ _CURRENCIES Currency Code Name Subunit Name Exponent Symbol * JPY Japanese Yen SEN 0 [1/1] ¥
  70. @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

    ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ _CURRENCIES Currency Code Name Subunit Name Exponent Symbol * IQD Iraqi Dinar Fils 3 [1/1000] د.ع
  71. @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

    ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ - Dollar € - Euro £ - British Pounds ¥ - Japanese yen ₪ - Israeli new shekel R$ - Brazilian real ₹ - Indian rupee ₩ - North Korean won ₱ - Philippine peso ₴ - Ukrainian hryvnia ฿ - Thai baht CHF - Swiss Franc
  72. @yonbergman _FORMATTING $3,500.50 en_US fr_FR 3 500,50 $

  73. @yonbergman 360 451 996 007,42 € Bulgarian, Czech, Estonian, Finnish,

    French, Italian, Lithuanian, Polish, Portuguese, Slovak, Swedish 360.451.996.007,42 € Croatian, Danish, Dutch (Belgium), German (Germany), Greek, Romanian, Slovenian, Spanish € 360.451.996.007,42 Dutch (Netherlands), German (Austria) €360,451,996,007.42 English (UK), Irish, Maltese 360 451 996 007,42 EUR Hungarian €360 451 996 007,42 Latvian € EUROS
  74. @yonbergman _ZERO DECIMAL $3.50 = 350 ¥350 = 350

  75. @yonbergman _LQA

  76. @yonbergman _LANGUAGE QUALITY ASSURANCE The process of verifying content post-translations

    and/or receiving and acting on feedback post-launch.
  77. @yonbergman _PSEUDO LOCALIZATION i s a s o f t

    w a r e t e s t i n g m e t h o d u s e d f o r testing internationalization aspects of software. Where the textual elements of an application are replaced with an altered version of the original language. Edit program settings [!!! εÐiţ Þr0ģЯãm səTτıИğ§ !!!]
  78. @yonbergman G11N, I18N, L10N ENCODINGS, UTF8, EMOJIs LOCALES FORMATS, CLDR

    TRANSLATIONS, CATs REGIONALIZATION CASH, CURRENCIES LQA @yonbergman
  79. @yonbergman Questions? ?תולאש 问题吗 Fragen? des questions? ؟ةلئسألا @yonbergman

  80. @yonbergman Thank you הדָוֹת ¡Gracias! ありがとうございました धन्यवाद Merci مكل اركش

    Danke! @yonbergman