Slides (Powerpoint) - Rochester Java User`s Group
Download
Report
Transcript Slides (Powerpoint) - Rochester Java User`s Group
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