iOS Localization


Published on

Published in: Technology, Business
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • Hi, I’m Dierk Seeburg. I’m a professional translator so this presentation is shaped from a translator’s point of view.\n
  • Why would you want to localize?\n
  • The Pareto principle (also known as the 80–20 rule, the law of the vital few, and the principle of factor sparsity) states that, for many events, roughly 80% of the effects come from 20% of the causes.\n
  • About 20% of total revenue comes from non-English speaking countries.\nIf you’re developing commercial software, you’re going to want to sell it globally.\nIf you don’t, you’re leaving money on the table.\n
  • 600000 apps in the app store\n25 billion downloads\nUSD 5 billion paid out\n
  • Globalization is the global distribution of the production of goods and services, through reduction of barriers to international trade.\n
  • Internationalization is the process of designing and building an application to facilitate localization.\nCreating separate user-visible text and images from your executable code and translating them into desired languages.\nIntegrating the content back into your app as separate localized resource files stored within your app’s bundle.\nUsing system provided APIs to express and manage user-visible or dynamically generated values properly across different locales (e.g. dates, lengths, weights, price and currency symbols).\nEnsuring your app accepts user-generated text in any language and in multiple languages at once, independent of the language of the user interface.\n
  • \n
  • Localization, in turn, is the cultural and linguistic adaptation of an internationalized application to two or more culturally-distinct markets. When users launch a well-localized application, they should feel fully at home with it and not feel like it originated from some other country.\n
  • \n
  • Localizing an application often involves translating the user-visible text of the application, but that is only part of the work that must be done.\n
  • \n
  • What do you need to localize?\n
  • Nib files, that is files containing windows, views, menus must be modified to accept translated text.\nStatic text must be translated.\nIcons and graphics (especially those containing culture-specific images) must be changed to be more culturally appropriate.\nSound files that contain spoken language must be rerecorded for each supported language.\nSupport websites must be localized to provide a culturally appropriate support structure.\nOnline help must be translated.\nDynamic text generated by your program (including dates, times, and numerical values) must be formatted using the current locale information.\nText handling code must calculate word breaks using the current locale information.\nTabular data must be sortable using the current locale information.\nMarketing materials used in social media must be translated to provide a culturally consistent experience.\n
  • Who should you ask to localize?\n
  • \n
  • How do you go about localizing your resources?\n
  • Users specify the languages they would prefer to see using the preferences of the target platform\n
  • For language designations, you can use either the ISO 639-1 or ISO 639-2 conventions. The ISO 639-1 specification uses a two-letter code to identify a language and is the preferred way to identify languages. However, if an ISO 639-1 code is not available for a particular language, you may use the three-letter designators defined by the ISO 639-2 specification instead. Table 1 lists ISO designators for a subset of languages. Note that there is no ISO 639-1 designator for Hawaiian and so you must use the ISO 639-2 designator.\n
  • Few users can recognize languages by their ISO designators. If you need to display the actual name of a language to a user, you can use the NSLocale method displayNameForKey:value: to get the correct display name for the language or locale ID.\n
  • For regional designations, you can use the ISO 3166-1 conventions. This specification uses a two-letter, capitalized code to identify a specific country. By concatenating a language designator with an underscore character and a regional designator, you get a designator that identifies the locale for a specific language and country. Table 2 lists the regional designators for a subset of languages and countries.\n
  • Locale preferences convey regional differences for the way dates, times, and numbers are displayed. Mac OS X and iOS specify predefined locales for many world regions, as shown here. In iOS, the user can select the desired region only, but in Mac OS X the user can also customize the information for any of the default locales to further personalize the system.\nThe Foundation framework provides the NSLocale class and the Core Foundation framework provides the CFLocaleRef opaque type for retrieving locale information.\n
  • The resource files for a single localization are stored together in a language-specific project directory, which is a directory whose name is a combination of the language name and the .lproj filename extension\n
  • At localization time, you send the source-language .lproj folder (for example, en.lproj for developers in English-speaking countries) to a localization service, or to your in-house translation department. You also need to send the compiled application to allow the localizer to view dynamically-loaded resources in context, to ensure appropriate translations and to ensure adequate dimensions for user interface elements that display dynamically-loaded resources. For each target language, the translator sends back a .lproj folder in which each resource file has been appropriately localized.\n
  • The tool used by localization teams to edit resource files varies by resource type. Nib files are typically edited using the Interface Builder application. Other resource files can be edited with an appropriate editor. For strings files, you can use most text editors in Mac OS X. Whenever possible though, use an editor that can save text in Unicode format, such as the TextEdit application. String files saved in Unicode format can be used in a running application directly, while other file formats must be converted to Unicode before they can be used.\n
  • Applications should use Unicode-based technologies in all situations that involve displaying text to the user. Unicode support is essential for multibyte languages and the system supports some languages (including Arabic, Thai, Greek, and Hawaiian) only through Unicode. Regardless of whether you localize your software for multibyte languages, you should still support Unicode so that users can enter text data in their native language.\n
  • Use formatter objects to interpret dates and numbers and to present them to the user. To format dates use NSDateFormatter objects.\n
  • To format numbers, use the NSNumberFormatter objects.\n
  • For localized strings, use the NSLocalizedString macro (and related macros) .\n
  • \n
  • In Interface Builder 3.0 and later, you can obtain a list of the strings in your nib file by choosing Tools > Strings. The window that appears (Figure 1) contains a list of the objects in your nib file along with entries for each property that contains a string that might be displayed to the user. The Value column shows the string (if any) that is set for each property when the nib file is loaded into memory.\nIn addition to viewing all of the strings in a nib file, developers and translators can also use the Strings window it to edit the string values. Double-clicking the value for an entry makes that entry editable. If you specify a new value, Interface Builder applies that value to the specified property.\n
  • \n
  • Localizing strings in nib files is a two step process. First you need to extract the source strings and then you need to merge the translated strings back into the localized version of the nib.\nUsing the ibtool you can extract the English strings from the main nib of a project into a new strings file. You can store a copy of the resulting file for use later or give the file to the translation team.\nThe merge example takes the original English-based nib file and merges it with the translated strings to create a localized version of the nib:\n
  • What’s next? Lastly, you should promote your app in local markets. Apple offers promotional badges that are localized in many languages, which you can use to promote your iOS and Mac apps in the App Store. It’s another simple thing you can do to make your app stand out to a broader audience. iOS and Mac Developer Program members can download these badges from the App Store Resource Center.\n\n
  • This sign was posted in Swansea, Wales, and the bottom half of the sign is written in Welsh. The translation of the Welsh is, "I am not in the office at the moment. Send any work to be translated."\n
  • If you would like to see some examples of localization gone horribly wrong, then do yourself a favor and go to\n
  • Let me know, if you have any questions!\n
  • iOS Localization

    1. 1. Localization for iOS 1
    2. 2. Why? 2
    3. 3. Why localize? English Other 80% 20% 3
    4. 4. Situation600000 30000000450000 22500000300000 15000000150000 7500000 0 0 apps downloads (in K) paid out (in $K) 4
    5. 5. Globalization G11n 5
    6. 6. Internationalization I18n 6
    7. 7. I18n Pitfalls• Text in graphics• Text in code• Text overlap• Character expansion 7
    8. 8. Localization L10n 8
    9. 9. L10n Pitfalls• Colors • Audio sounds• Shapes • Famous example: Chevy Nova• Sounds• Images• Symbols• Voice over 9
    10. 10. Translation T9n 10
    11. 11. T9n Pitfalls• Puns• Idioms• Metaphors• Colloquialisms• Character expansion 11
    12. 12. What? 12
    13. 13. What to localize?• Nib files • Online help• Static text • Dynamic text• Icons and graphics • Text handling code• Sound files • Tabular data• Support website • Social media• etc. 13
    14. 14. Who? 14
    15. 15. Who should localize?• Yes: • Language Service Provider (LSP) • Localization Professional • Professional Translator• No: • Machine Translation (e.g., Google Translate) • Your secretary’s “bilingual” second cousin 15
    16. 16. How? 16
    17. 17. Languages 17
    18. 18. Languages Language ISO 639-1 ISO 639-2 English en eng French fr fre• ISO 639-1, ISO 639-2 German de ger Japanese ja jpn Hawaiian no designator haw 18
    19. 19. Language NamesNSString *identifier = [[NSLocale currentLocale]localeIdentifier];NSString *displayName = [[NSLocale currentLocale]displayNameForKey:NSLocaleIdentifier value:identifier]; 19
    20. 20. Regions Regional dialect Region Designator English (United States) US English (Great Britain) GB• ISO 3166-1 English (Australian) AU French (France) FR French (Canadian) CA 20
    21. 21. Locales 21
    22. 22. Resources 22
    23. 23. Resource Files 23
    24. 24. Editing 24
    25. 25. Unicode 25
    26. 26. DatesNSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];[dateFormatter setDateStyle:NSDateFormatterMediumStyle];[dateFormatter setTimeStyle:NSDateFormatterNoStyle];NSDate *date = [NSDatedateWithTimeIntervalSinceReferenceDate:162000];NSString *formattedDateString = [dateFormatterstringFromDate:date];NSLog(@"formattedDateString: %@", formattedDateString);// Output for locale en_US: "formattedDateString: Jan 2,2001" 26
    27. 27. NumbersNSNumberFormatter *numberFormatter = [[NSNumberFormatteralloc] init];[numberFormattersetNumberStyle:NSNumberFormatterDecimalStyle];NSString *formattedNumberString = [numberFormatterstringFromNumber:[NSNumber numberWithFloat:122344.4563]];NSLog(@"formattedNumberString: %@", formattedNumberString);// Output for locale en_US: "formattedNumberString:formattedNumberString: 122,344.453" 27
    28. 28. Strings/* Insert Element menu item */"Insert Element" = "Element einschieben";/* Error string used for unknown error types. */"ErrorString_1" = "Ein unbekannter Fehler ist aufgetreten."; 28
    29. 29. Strings translation pitfalls• Variable insertion• Sentence fragmentation• Dynamic text insertion• Untranslatable text 29
    30. 30. Nib files strings 30
    31. 31. Nib files pitfalls• Lock all connections before handing your nibs off to translation• Update minimum dialog or window sizes• Have help tags for an object localized in Interface Builder’s inspector 31
    32. 32. ibtoolExtractibtool --generate-strings-file MainMenu.strings en.lproj/MainMenu.nibMergeibtool --strings-file de.lproj/MainMenu.strings --writede.lproj/MainMenu.nib en.lproj/MainMenu.nib 32
    33. 33. Next? 33
    34. 34. 34
    35. 35. Giggles: 35
    36. 36. Questions?•• @icotext 36