Successful Locali(z)(s)ation - Droidcon Berlin 2016

Successful Locali(z)(s)ation - Droidcon Berlin 2016

666ef10ec14e5a23d0fcf05bd2665575?s=128

rejasupotaro

June 16, 2016
Tweet

Transcript

  1. Successful Locali(z)(s)ation Droidcon Berlin 2016 Kentaro Takiguchi @rejasupotaro

  2. Introduction Introduction > Real World Localizlation > Localization in Development

    > Translation > Understanding users > Conclusion
  3. About our service Cookpad is the largest recipe sharing service

    in Japan. From 2014, Cookpad has started expanding the service globally.
  4. This is the first step of our The previous logo

    looks “loud” in foreign countries
  5. We have branch offices around the world and collaborate with

    local members
  6. We support English, Español, ภาษาไทย, Bahasa Indonesia, Tiếng Việt, …

    Each locale has different lifestyle and different recipes.
  7. Why Go Global Should we really do it?

  8. http://www.kpcb.com/internet-trends

  9. http://www.internetworldstats.com/stats7.htm

  10. Can you find Japan?

  11. That’s it.

  12. Global Project - Domestic Project = Localization The only different

    between global project and domestic project is localization
  13. GLOBALIZATION = INTERNATIONALIZATION = LOCALIZATION = TRANSLATION = CALTURALIZATION ???

    What’s the difference between these terms?
  14. Internationalization • The process of designing a service so that

    it can potentially be adapted to various languages and region without engineering changes. a.k.a. i18n
  15. Localization • The process of adapting internationalized service for a

    specific language or region by adding locale specific components or text. a.k.a. l10n
  16. Extract string resources →Internationalization i18n and l10n are can’t be

    separated. Add local language resources →Localization
  17. In my understanding. Globalization Internationalization Localization Translation Industry Legal Religion

    Culture
  18. Real World Localization Introduction > Real World Localizlation > Localization

    in Development > Translation > Understanding users > Conclusion
  19. Have you ever played this game?

  20. In the latest title, they completely support Arabic and added

    an Arabic playable character named Rashid
  21. Users growth in Arabic is 6,592.5%. It increases interest as

    a new market.
  22. Far Cry 4 is an open world first person shooter

    video game developed by Ubisoft
  23. Localized version was released 2 months later What’s the difference

    between the original version and the localized version? " Released on November 2014 # Released on January 2015
  24. Violence and Obscene They have different standard " Released on

    November 2014 # Released on January 2015
  25. A word “Drug” can’t be used in Japan. They changed

    the expression like “This is something makes you feel better”.
  26. Each country has different rules https://support.google.com/googleplay/answer/6209544?hl=en Content Rating in Google

    Play • North & South America • Europe & Middle East • Germany • Australia (Games only) • Brazil • South Korea • Other countries
  27. These movie posters are for the same movie. The poster

    designed in Japan has much more information. A closed-room mystery made by Quentin Trantino Who will be able to survive? 8 ruffians, all of them are liar This movie should be an Academy Award winning
  28. Asian people put information into small space

  29. It encourage consumer purchasing sentiment for people living in there

  30. International availability of McDonald’s products I don’t know how much

    German people love % Pasta # Red beans paste & McBeer
  31. The preference depends on what they have had before now

  32. McDonald’s in india has numerous vegetarian options

  33. Pay attention what people feel

  34. Opportunities and Challenges • Language • Religion • History •

    Industry • Legal issues • Climate • Infrastructure • … Big opportunities and big challenges
  35. Localization in Development Introduction > Real World Localizlation > Localization

    in Development > Translation > Understanding users > Conclusion
  36. Localize your app • LTR, RTL • Locale • Format

    • Performance • APK size • Traffic • … Only in the field of Android development, there are many things to consider • Writing system • Character • Encoding • Font • Text size • Grammer • Text length
  37. There are various writing systems in the world we are

    living
  38. We don’t need to worry about characters if we use

    the same encoding, right? Unicode 9.0 128,172 characters
  39. Unicode and Characters https://medium.com/behancetech/localization-gotchas-for-asian-languages-cjk-e52a57c0fde1

  40. They would uninstall your app # This app doesn’t seem

    to support Japanese Uninstall Custom font The same unicode value
  41. Font The text is rendered perfectly! How about in other

    languages?
  42. Text Size These font and the text size are the

    same between screenshots
  43. Text Size According to my colleague, using the same text

    size doesn’t work in Arabic <!— ar/dimens.xml —> <resources> <dimen name="text_size_xxlarge">27sp</dimen> <dimen name="text_size_xlarge">25sp</dimen> <dimen name="text_size_large">21sp</dimen> <dimen name="text_size_medium">19sp</dimen> <dimen name="text_size_small">17sp</dimen> <dimen name="text_size_xsmall">15sp</dimen> <dimen name="text_size_xxsmall">13sp</dimen> <dimen name="text_size_xxxsmall">11sp</dimen> </resources> <!— dimens.xml —> <resources> <dimen name="text_size_xxlarge">26sp</dimen> <dimen name="text_size_xlarge">24sp</dimen> <dimen name="text_size_large">20sp</dimen> <dimen name="text_size_medium">18sp</dimen> <dimen name="text_size_small">16sp</dimen> <dimen name="text_size_xsmall">14sp</dimen> <dimen name="text_size_xxsmall">12sp</dimen> <dimen name="text_size_xxxsmall">10sp</dimen </resources>
  44. Text Size The difference is small but it helps Arabic

    users a lot Default (ar) +1 sp (ar)
  45. • Alphabets: • Syllabaries: • Logographies: 3 kind of types

    of writing systems
  46. Logographies Logographies can contain a lot of meaning in just

    one character
  47. How to say “Butterfly” Writing systems affect text length #

    ௏ % Farfalla ' Mariposa ( Papillon & SCHMETTERLING!!!
  48. I make sure to check all layouts in German when

    I launch my app in Germany
  49. Word Order: SVO SVO: 488 languages " I eat bread

    = [Subject] [Verb] [Object]
  50. Word Order: SOV SOV: 565 languages # I bread eat

    = [Subject] [Object] [Verb]
  51. Word Order: VSO VSO: 95 languages ) Eat I bread

    = [Verb] [Subject] [Object]
  52. Word Order • " = [Subject] [Verb] [Object] • #

    = [Subject] [Object] [Verb] • ) = [Verb] [Subject] [Object] What’s the impact of this difference?
  53. Quantity: Ingredient Name? Which order does it look natural?

  54. Left-To-Right and Right-To-Left Some languages start from the right and

    continue to the left
  55. Depending on the text direction, we also need to flip

    views and some icons Flipped
  56. https://developer.android.com/about/versions/android-4.2.html#RTL

  57. How to support RTL The cost of supporting RTL was

    not so high than I expected • layout_marginLeft => layout_marginStart • layout_marginRight => layout_marginEnd • layout_alignParentLeft => layout_alignParentStart • layout_alignParentRight => layout_alignParentEnd • … <application android:supportsRtl=“true” … >
  58. Some components need to be flipped by hand FloatingActionButton ViewPager

  59. Put your app on a diet It affects the number

    of daily downloads. We should avoid adding locale specific resources as much as possible.
  60. None
  61. Sometimes we need to add locale specific images like this

    Flipped
  62. Locale • A set of parameters that defines a user

    language and country. • It is used to identify user’s environment. Identifying the user environment is important to provide optimized content. Locale.getDefault()
  63. en-US Language codes are defined in ISO 639. Country codes

    are defined in ISO 3166. ISO 639 ISO 3166 = new Locale(“en”, “US”);
  64. Language != Country Spanish is spoken widely. We have 4

    translations only for Spanish. en-US American English en-GB British English es-ES Spanish Spanish es-419 Latin American Spanish pt-PT Portuguese in Portugal pt-BR Portuguese in Brazil zh-CN Simplified Chinese zh-TW Traditional Chinese
  65. The order and the format are totally changed Formatter.format(new Date());

    // => # 2016/06/09 ޕޙ11:50 Formatter.format(new Date()); // => " 6/9/16 11:50 PM Formatter.format(new Date()); // => + 09/06/16 11:50 PM
  66. Format We should use formatters. Don’t write it by hand,

    it couldn’t make sense in some counties. US English French German Spanish Italian Japanese Time hh:mm:ss am/pm (12- hour clock) hh:mm:ss (24-hour clock) hh:mm:ss (24-hour clock) hh:mm:ss (24-hour clock) hh:mm:ss (24-hour clock) hh:mm:ss (24-hour clock) Decimal Separator period (.) comma (,) comma (,) comma (,) comma (,) period (.) Thousand Separator comma (,) space ( ) space ( ) or period (.) space ( ) space ( ) or period (.) comma (,) Number Example 12,345.67 12 345,67 12 345,67 or 12.345,67 12 345,67 12 345,67 or 12.345,67 12,345.67 Currency $12,345.67 12 345,67¢ 12 345,67¢ 12 345,67¢ ¢12.345,67 ¥12,345 Ordinal 1st 2nd 3rd … 1er 2e 3e … or 1re 2e 3e … … 1o 2o 3o … or 1a 2a 3a … 1o 2o 3o … or 1a 2a 3a … 1ͭ 2ͭ 3ͭ …
  67. Japanese is multibyte string. US has multiple timezone. # are

    good at multibyte string " are good at time difference
  68. Performance Performance turning is a part of localization.

  69. The crowds in rush hours in Tokyo is crazy.

  70. Japanese ticket gates have high throughput and high availability for

    that
  71. Building something without considering the environment makes your product useless

  72. None
  73. https://speakerdeck.com/rejasupotaro/improving-ux-through-performance

  74. Facebook is developing a lite version of Facebook app

  75. Traffic Don’t miss your opportunity.

  76. People gather and cook for Christmas party Christmas

  77. Muslims abstain from all food and drink during the daylight

    hours Ramadan ?
  78. Actually, traffic is increased doubled, tripled, … Why?

  79. “Fasting” doesn’t mean they don’t have anything for a month.

    It is only in daylight hours. They cook and enjoy dinner after sunset.
  80. Traffic from Arabic starts increasing 2 weeks before unlike Indonesia.

    Why? Arabic Indonesian
  81. Our app has been featured on Google Play

  82. Alarm apps get become popular during Ramadan. Why?

  83. Prepare for Ramadan We can prepare in advance if we

    know their lifestyle
  84. Translation Introduction > Real World Localizlation > Localization in Development

    > Translation > Understanding users > Conclusion
  85. name + “ added ” + number + “ person

    to his list” How many problems can you find?
  86. How many problems can you find? MARY + “ added

    ” + 7 + “ person to his list” Should be “her” Plurals Number could be changed Female / Male Don’t concatenate string
  87. Plurals Forms Use Android internationalization framework <?xml version="1.0" encoding="utf-8"?> <resources>

    <plurals name="plural_name"> <item quantity=["zero" | "one" | "two" | "few" | "many" | "other"] >text_string</item> </plurals> </resources> English Polish 0 Apples Jablek 1 Apple Jablko 2..4 Apples Jablka 5..21 Apples Jablek 22..24 Apples Jablka 25..34 Apples Jablek
  88. Choose “appropriate words” I know, but what is “appropriate word”?

  89. http://imgur.com/gallery/Kk3JI

  90. “Appropriate word” is changed by context Move to my library

    —— Oregon State —— Continue shopping OR = Oregon State, right…
  91. The difference is obvious if you know the context

  92. “Premium” could be offended “Premium” sounds like “Evil” in some

    countries
  93. “Premium Service” • Cookpad Premium • Cookpad Prime • Cookpad

    Elite • Cookpad Deluxe • Cookpad Extra • Cookpad Select • Cookpad First Class • … “Premium” could give negative impression. But in Spanish, it’s a familiar word.
  94. How to make it “appropriate”? Good workflow makes good translation

  95. What do translators feel when they receive this phrase? %1$d

    replied to your photo of %2$d.
  96. We are using placeholders to make phrases readable {sender_name} replied

    to your photo of {recipe_title}.
  97. https://github.com/square/phrase - Phrase is an Android string resource templating library

    Phrase.from(context, R.string.reply_to_photo_comment) .put(“sender_name”, user.getName()) .put(“message_count”, messages.size()) .format();
  98. Leave a comment when adding a new phrase <!— This

    message is displayed when a user receive a reply—> <string name=“reply_to_photo_comment”> {sender_name} replied to your photo of {recipe_title}. </string>
  99. It makes translation easier This message is displayed when a

    user receive a reply
  100. Otherwise, Latin American people may think “Spanish is available but

    Latin American recipes are not available”. es-ES es-419
  101. Introduction > Real World Localizlation > Localization in Development >

    Translation > Understanding users > Conclusion Understanding users
  102. Preferences vary with each individual “All German people drink beer

    everyday?”
  103. “What is national character!?” “What is localization!?” “How to develop

    global services!?” I’m getting confused
  104. “We never know what users want until we release the

    service”
  105. We are repeating a cycle of Build - Measure -

    Learn to understand users Build - Measure - Learn
  106. https://speakerdeck.com/rejasupotaro/collecting-logs-from-mobile-apps

  107. Unified logging layer for mobile apps Puree guarantees that logs

    are sent correctly even if the device is not connected • Buffering • Filtering • Batching • Retrying • Pluggable
  108. Conclusion Introduction > Real World Localizlation > Localization in Development

    > Translation > Understanding users > Conclusion
  109. Requirement level Requirement level is not the same between services

    Quality Cost Requirement level (depends on service)
  110. Localization is fun! I leaned a lot while locazing my

    app. Learning culture is fun!
  111. Thank you! • Kentaro Takiguchi • GitHub: rejasupotaro • Twitter:

    @rejasupotaro Feel free to contact me