Download presentation
Presentation is loading. Please wait.
Published byHelen Roberts Modified over 9 years ago
1
Going Global: Internationalization with Java Sue Davis Rochester Java Users Group November 15, 2000
2
November 20002 Agenda Introduction Definition of Internationalization Why internationalize? Highlight some aspects of internationalization Java internationalization classes Simple Demonstration Closing thoughts Q&A
3
November 20003 Introduction My background in internationalization Scope of internationalization Software Documentation/On-line Help Testing Training Legal considerations Marketing
4
November 20004 Introduction zInternationalization is the process of designing and developing products enabled for simultaneous shipment (Sim Ship) to both domestic and world markets.
5
November 20005 Terms and Abbreviations zLocalization zGlobalization zLocale zDiacritic zFolding zDecomposed character zPre-composed character zMBCS zDBCS zUnicode zUTF-8 zI18N zG11N zL10N zNLS zIME zGlyph
6
November 20006 Why Internationalization Is Important North America represents only 1/3 of the world economy Europe, Latin America, Japan and Asia Pacific represent more than 1/2 Subtle differences even in other English speaking counties Localization is expensive Maintain one set of source, ship one binary for multiple locales
7
November 20007 Motivated self interest Try “Internationalization or i18n” on major job search engine Internationalization positions at other major corporations Sun: Internationalization Architect Apple: Internationalization Technology Evangelist Compaq: I18N/L10N Development Manager Kodak: Product Internationalization Manager The Web has made it easier than ever to reach the global market. Expect this to be skill that is in demand.
8
November 20008 What does it mean to Internationalize Externalize text, icons, sound. Design for expansion of translated text Use of culturally neutral graphics whenever possible Automatically format of dates and numbers as appropriate to the locale Consistent use of terminology, correct grammar, avoid slang Managing various character encoding schemes And more...
9
November 20009 Design for expansion of translated text English is very compact language If target markets include Asian countries, allow additional vertical spacing. Negatives if the UI has to be redesigned to be usable after translation: Longer time to market Higher localization costs Higher maintenance costs Localization of Training, Help, & User documentation becomes more complicated
10
November 200010 English length (in characters) Additional growth for localized strings* 1 to 4 100% 5 to 10 80% 11 to 20 60% 21 to 30 40% 31 to 50 20% 51+ 10% * From MSDN, VB Concepts, Designing an International Aware User Interface
11
November 200011 Use culturally/linguistically neutral graphics Don’t use a Christmas Tree and Champagne glass as a “holiday” icon Keep text off graphics Don’t use homonyms as a basis for icons
12
November 200012 Use culturally/linguistically neutral graphics Continued... Are any of these neutral?
13
November 200013 Let’s talk about Java! What are some of the important Java classes for internationalization? Locale ResourceBundle, specifically ListResourceBundle NumberFormat DateFormat Collator CollationKey RuleBasedCollator BreakIterator
14
November 200014 The Locale class A Locale is defined as a combination of language, country and variant Two character ISO codes for both language and country. Language codes are all lower case (ISO 639) Country codes are upper case (ISO 3166) Variants are “ad hoc” - most frequently used to specify Euro currency
15
November 200015 Externalize text, icons, sound Resources reside in a resource file that is separate from the application. Java - Resource Bundle Don’t combine phrases to make sentences Makes the executable language independent Isolates resources for translation and localization Can enable a new locale by just installing the appropriate Resource Bundle. (in theory)
16
November 200016 What is a ResourceBundle? A ResourceBundle (java.util.ResourceBundle) is an abstract class with two concrete subclasses: PropertyResourceBundle (limited use, not recommended) ListResourceBundle Consists of minimally a “base” class extending PropertyResourceBundle Locale specific resources are added by creating additional classes with language and country extentions
17
November 200017 Using PropertyResourceBundle Create the baseline ResourceBundle class DemoResource extends PropertyResouceBundle { public Object[][] getContents() {return contents; } static final Object[][] contents = { // Localize right hand object {"SampleKey", "translatable text"}, // helpful hint {"HelloWorldKey", "Hello World"}, {"MenuFileKey", "File"}, {"MenuFileExitKey", "Exit"}, {"MenuHelpKey", "Help"}, {"MenuHelpAboutKey", "About"}, }; }
18
November 200018 Begin Localizing your ResourceBundles Create a language specific ResourceBundle class DemoResource_fr extends PropertyResouceBundle { public Object[][] getContents() {return contents; } static final Object[][] contents = { // Localize right hand object {"HelloWorldKey", "Bonjour Monde"}, {"MenuFileKey", "Fichier"}, {"MenuFileExitKey", "Quittent"}, {"MenuHelpKey", "Aide"}, {"MenuHelpAboutKey", "Au sujet de"}, }; }
19
November 200019 Localize ResourceBundles for language & country Create a locale specific ResourceBundle class DemoResource_fr_FR extends PropertyResouceBundle { public Object[][] getContents() {return contents; } static final Object[][] contents = { // Localize right hand object {"HelloWorldKey", "Bonjour Monde for France"}, }; }
20
November 200020 Cascading Resource Bundles Why you don’t need to redefine every key in DemoResource_fr_FR ResourceBundles cascade from most specific locale information down to the base, in this case, DemoResource So if your Locale is Locale.FRANCE (or Locale(“fr”, “FR”) ) the code will search the ResourceBundle classes for the key in the following order: DemoResource_fr_FR DemoResource_FR DemoResource An exception is thrown if the key is not found in ANY of these classes
21
November 200021 Lets look at some code Using ResourceBundles in Packages Package name MUST be the same as the bundle’s base name The ResourceBundle class must be FULLY qualified Do not need to import the package
22
November 200022 Formatting Text Messages Sometimes there’s no way around it. You HAVE to have variables integrated into the message. Remember sentence structures vary between languages, so you need to give your translator a way to move things around without breaking the code
23
November 200023 Java to the rescue The class MessageFormat allows you to number the placeholders for your variables: In your ResourceBundle … {“key”, “my formatted {1} message is very {2}”} // helpful hints to the translator go here In your code… myObj.value = MessageFormat.format( rb.getString(“key”), new Object( varible1, variable2) ) );
24
November 200024 Automatic formatting of dates and numbers as appropriate to the locale Date formats vary from country to country, even among English speaking counties. Long Date examples: US: Thursday, August 19, 1999 UK: 19 August 1999 DE: Donnerstag, 19.August 1999 FR: jeudi 19 aôut 1999
25
November 200025 Automatic formatting continued... Date formats vary from country to country, even among English speaking counties. Short Date examples: US: 8/19/99 UK: 19/08/99 DE: 19.08.99 FR: 19/08/99
26
November 200026 Automatic formatting of numbers and currency Numeric examples:Currency US:1,234,567.89$1,234.45 UK:1,234,567.89£1,234.45 DE:1.234.567,891.234,45 DM FR: 1 234 567,891 234,45 F Java 1.1.6 and later support the Euro
27
November 200027 Automatic Formatting in Java Available classes DateFormat NumberFormat DecimalFormat SimpleDateFormat Date good for storing elapsed time since Jan 1, 1970 GMT API assumes the Gregorian Calendar Calendar TimeZone JDK supports only the Gregorian calendar
28
November 200028 Dealing with characters and strings Assuming Unicode Character traits Comparisons and conversions Sorting Text boundaries
29
November 200029 Characters traits idDefined() isDigit() isLetter() isSpace()/isSpaceChar()/isWhiteSpace() isLetterOrDigit() isUpperCase()/isLowerCase()/isTitleCase() getType() getNumericValue()
30
November 200030 Comparisons and conversions Comparing pre-composed characters with decomposed characters String conversions (e.g. toUpperCase()) not always “round trip”
31
November 200031 Sorting Do not use String.compareTo() for natural language text. Use Collator to compare locale sensitive strings Use CollationKey to sort long lists RuleBasedCollator Character folding (ignore diacritics résumé vs. resume)
32
November 200032 Tools to help you go global... Internationalizing source code One Realm Uniscape Java Machine Translation/Machine Assisted Translation Consulting Internationalization - small but growing Localization - Lots Training - Minimal, usually in conjunction with a product purchase or consulting contract
33
November 200033 Use terms consistently Use correct grammar, avoid slang Facilitates the use of Machine Assisted Translation translation tools Helps minimize questions from translators Impacts Developers, Documentation, QA
34
November 200034 Closing Thoughts EJAL: English is Just Another Language Anything is fair game for localization, including corporate names and logos. Internationalization is NOT a feature. Internationalization IS a design issue Internationalization shortens and simplifies the localization process. Rapid deployment, improved time to market Lower maintenance time & costs Frees development resources for new product development
35
November 200035 Not Discussed Using third party software Sorting Text boundary conditions Accelerator keys Color Software Architecture Configuration Management Issues Legal requirements Bi-directional languages Different calendars (Hebrew, Japanese Imperial, Buddhist, Islamic…)
36
November 200036 Recommended Reading JavaWorld, Internationalize Your Software, Geoff Friesen part 1, part 2, and part 3part 1part 2part 3 Internationalization: Localization with Resource bundles, John O'Conner Internationalization: Localization with Resource bundles, John O'Conner Global Design Homepage, Richard Ishida Global Design Homepage, Richard Ishida Scripting Clinic: Using Script to Internationalize Web Site Functions Scripting Clinic: Using Script to Internationalize Web Site Functions Localization and the XML/DHTML Menus Localization and the XML/DHTML Menus Developing Global Applications in Java, Richard Gillam Developing Global Applications in Java, Richard Gillam Developing International Software for Windows 95 and Windows NT, Nadine Kano, Available electronically on MSDN MSDN, Windows Interface Guidelines for Software Design
37
November 200037 Questions???
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.