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

    @yonbergman A WHOLE NEW WORLD Taking your app global and

    living to tell the tale @yonbergman
  2. 2.
  3. 4.

    t e c h n o l o g y

    @yonbergman
  4. 5.
  5. 9.

    @yonbergman YOUR AWESOME APP LOG IN ה א פ ל

    י ק צ י ה ה מ ד ל י ק ה ש ל כ ם ה ת ח ב ר ఍፥༉ ଫአ ጭ୯ Ihre ehrfürchtige APP Einloggen
  6. 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
  7. 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.
  8. 14.

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

    TRANSLATIONS, CATs REGIONALIZATION CASH, CURRENCIES LQA @yonbergman
  9. 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.
  10. 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")
  11. 28.

    @yonbergman _EASCII Extended ASCII with 8 bit support for standard

    ASCII + more characters
 
 Windows CP 1255 IBM CP 916
  12. 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
  13. 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()
  14. 33.

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

    that the user wants to see in their user interface.
  15. 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.“
  16. 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 ! " $ % & ' (
  17. 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
  18. 41.

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

    header. Can support fallback languages. 
 Best Practice: Let users choose
  19. 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
  20. 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
  21. 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
  22. 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 #
  23. 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
  24. 53.

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

    'Hello {name}' }, fr: { GREETING: 'Bonjour {name}' } };
  25. 58.

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

    'Hello {name}' }, fr: { GREETING: 'Bonjour {name}' } };
  26. 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
  27. 66.

    @yonbergman _CURRENCIES $ € £ ¥ ₪ ₹ ₩ ₱

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

    @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

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

    @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

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

    @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

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

    @yonbergman $ € £ ¥ ₪ ₹ ₩ ₱ ₴

    ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ $ € £ ¥ ₪ ₹ ₩ ₱ ₴ ฿ _CURRENCIES Currency Code Name Subunit Name Exponent Symbol * IQD Iraqi Dinar Fils 3 [1/1000] د.ع
  32. 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
  33. 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
  34. 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τıИğ§ !!!]
  35. 78.

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

    TRANSLATIONS, CATs REGIONALIZATION CASH, CURRENCIES LQA @yonbergman