Download Slides (Powerpoint) - Rochester Java User`s Group

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Going Global:
Internationalization with Java
Sue Davis
Rochester Java Users Group
November 15, 2000
Agenda








Introduction
Definition of Internationalization
Why internationalize?
Highlight some aspects of internationalization
Java internationalization classes
Simple Demonstration
Closing thoughts
Q&A
November 2000
2
Introduction
 My background in internationalization
 Scope of internationalization
 Software
 Documentation/On-line Help
 Testing
 Training
 Legal considerations
 Marketing
November 2000
3
Introduction
Internationalization is the process of designing
and developing products enabled for
simultaneous shipment (Sim Ship) to both
domestic and world markets.
November 2000
4
Terms and Abbreviations









Localization
Globalization
Locale
Diacritic
Folding
Decomposed character
Pre-composed character
MBCS
DBCS
November 2000








Unicode
UTF-8
I18N
G11N
L10N
NLS
IME
Glyph
5
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
November 2000
6
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.
November 2000
7
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...
November 2000
8
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
November 2000
9
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
November 2000
10
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
November 2000
11
Use culturally/linguistically neutral graphics
Continued...
Are any of these neutral?
November 2000
12
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
November 2000
13
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
November 2000
14
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)
November 2000
15
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
November 2000
16
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"},
};
}
November 2000
17
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"},
};
}
November 2000
18
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"},
};
}
November 2000
19
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
November 2000
20
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
November 2000
21
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
November 2000
22
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)
)
);
November 2000
23
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
November 2000
24
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
November 2000
25
Automatic
formatting of numbers and currency
Numeric examples:
US: 1,234,567.89
UK: 1,234,567.89
DE: 1.234.567,89
FR: 1 234 567,89
Currency
$1,234.45
£1,234.45
1.234,45 DM
1 234,45 F
Java 1.1.6 and later support the Euro
November 2000
26
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
November 2000
27
Dealing with characters and
strings
 Assuming Unicode
 Character traits
 Comparisons and conversions
 Sorting
 Text boundaries
November 2000
28
Characters traits
 idDefined()
 isDigit()
 isLetter()
 isSpace()/isSpaceChar()/isWhiteSpace()
 isLetterOrDigit()
 isUpperCase()/isLowerCase()/isTitleCase()
 getType()
 getNumericValue()
November 2000
29
Comparisons and conversions
 Comparing pre-composed characters with
decomposed characters
 String conversions (e.g. toUpperCase()) not always
“round trip”
November 2000
30
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)
November 2000
31
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
November 2000
32
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
November 2000
33
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
November 2000
34
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…)
November 2000
35
Recommended Reading
 JavaWorld, Internationalize Your Software, Geoff Friesen part 1, part
2, and part 3
Internationalization: Localization with Resource bundles, John O'Conner
Global Design Homepage, Richard Ishida
Scripting Clinic: Using Script to Internationalize Web Site Functions
Localization and the XML/DHTML Menus
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






November 2000
36
Questions???
November 2000
37