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

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

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

rejasupotaro

June 16, 2016
Tweet

More Decks by rejasupotaro

Other Decks in Technology

Transcript

  1. About our service Cookpad is the largest recipe sharing service

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

    looks “loud” in foreign countries
  3. We support English, Español, ภาษาไทย, Bahasa Indonesia, Tiếng Việt, …

    Each locale has different lifestyle and different recipes.
  4. Global Project - Domestic Project = Localization The only different

    between global project and domestic project is localization
  5. 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
  6. Localization • The process of adapting internationalized service for a

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

    separated. Add local language resources →Localization
  8. Real World Localization Introduction > Real World Localizlation > Localization

    in Development > Translation > Understanding users > Conclusion
  9. In the latest title, they completely support Arabic and added

    an Arabic playable character named Rashid
  10. Far Cry 4 is an open world first person shooter

    video game developed by Ubisoft
  11. 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
  12. Violence and Obscene They have different standard " Released on

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

    the expression like “This is something makes you feel better”.
  14. 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
  15. 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
  16. International availability of McDonald’s products I don’t know how much

    German people love % Pasta # Red beans paste & McBeer
  17. Opportunities and Challenges • Language • Religion • History •

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

    in Development > Translation > Understanding users > Conclusion
  19. 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
  20. We don’t need to worry about characters if we use

    the same encoding, right? Unicode 9.0 128,172 characters
  21. They would uninstall your app # This app doesn’t seem

    to support Japanese Uninstall Custom font The same unicode value
  22. 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>
  23. Text Size The difference is small but it helps Arabic

    users a lot Default (ar) +1 sp (ar)
  24. How to say “Butterfly” Writing systems affect text length #

    ௏ % Farfalla ' Mariposa ( Papillon & SCHMETTERLING!!!
  25. Word Order • " = [Subject] [Verb] [Object] • #

    = [Subject] [Object] [Verb] • ) = [Verb] [Subject] [Object] What’s the impact of this difference?
  26. 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” … >
  27. Put your app on a diet It affects the number

    of daily downloads. We should avoid adding locale specific resources as much as possible.
  28. 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()
  29. en-US Language codes are defined in ISO 639. Country codes

    are defined in ISO 3166. ISO 639 ISO 3166 = new Locale(“en”, “US”);
  30. 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
  31. 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
  32. 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ͭ …
  33. Japanese is multibyte string. US has multiple timezone. # are

    good at multibyte string " are good at time difference
  34. “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.
  35. name + “ added ” + number + “ person

    to his list” How many problems can you find?
  36. 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
  37. 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
  38. “Appropriate word” is changed by context Move to my library

    —— Oregon State —— Continue shopping OR = Oregon State, right…
  39. “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.
  40. 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();
  41. 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>
  42. Otherwise, Latin American people may think “Spanish is available but

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

    Translation > Understanding users > Conclusion Understanding users
  44. We are repeating a cycle of Build - Measure -

    Learn to understand users Build - Measure - Learn
  45. 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
  46. Requirement level Requirement level is not the same between services

    Quality Cost Requirement level (depends on service)