internationalization

46
Advanced Java Programming Topic: Internationalization By Ravi Kant Sahu Asst. Professor, LPU

Upload: ravi-kant-sahu

Post on 10-May-2015

476 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Internationalization

Advanced Java Programming

Topic: Internationalization

ByRavi Kant Sahu

Asst. Professor, LPU

Page 2: Internationalization

Contents

Introduction Locale Class Displaying Date and Time Formatting Numbers Resource Bundles

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 3: Internationalization

Introduction

Problem of customizing a program or page for different countries or languages.

It would be highly problematic to create and maintainenough different versions to meet the needs of all clients everywhere.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 4: Internationalization

Internationalization

Internationalization is the process of designing an application so that it can be adapted to various languages and regions without engineering changes.

Java is the first language designed to support Internationalization.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 5: Internationalization

Characteristics An internationalized program has the following characteristics:1. With the addition of localized data, the same executable can run

worldwide.

2. Textual elements, such as status messages and the GUI component labels, are not hardcoded in the program. Instead they are stored outside the source code and retrieved dynamically.

3. Support for new languages does not require recompilation.

4. Culturally-dependent data, such as dates and currencies, appear in formats that conform to the end user's region and language.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 6: Internationalization

Java Features to Support Internationalization

1. Unicode2. Locale Class3. Resource Bundles

Note: Java characters use Unicode, a 16-bit encoding scheme established by the Unicode Consortium to support the interchange, processing, and display of written texts in the world’s diverse languages.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 7: Internationalization

LocaLe cLass

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 8: Internationalization

Locale

A Locale object represents a geographical, political, or cultural region in which a specific language or custom is used. For example, Americans speak English, and the Chinese speak Chinese.

The conventions for formatting dates, numbers, and currenciesmay differ from one country to another.For example, The Chinese use year/month/day to represent the date, while Americans use month/day/year.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 9: Internationalization

Locale

Locale class encapsulates information about a specific locale.

A Locale object determines how locale-sensitive information, such as date, time, and number, is displayed.

The classes for formatting date, time, and numbers, and for sorting strings are grouped in the java.text package.

Every Swing class has a locale property inherited from the Component class.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 10: Internationalization

Creating Locale Object

Constructor:Locale (String Language)Locale (String Language, String Country)Locale (String Language, String Country, String Variant)

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 11: Internationalization

Language and Country Codes

Country Country Code Language CodeSpain ES esDenmark DK daGermany DE deGreece GR elChina CN zhSweden SE svFrance FR frNorway NO noJapan JP jaUnited Kingdom GB enKorea KR ko

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 12: Internationalization

Methods of Locale ClassString getCountry()String getLanguage()String getVariant()Locale getDefault()String getDisplayCountry()String getDisplayLanguage()String getDisplayName()String getDisplayVariant()Locale[] getAvailableLocales()

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 13: Internationalization

Locale Constants Predefined Country Constants

Locale.US, Locale.UK, Locale.FRANCE, Locale.GERMANY, Locale.ITALY, Locale.CHINA, Locale.KOREA, Locale.JAPAN

Predefined Language ConstantsLocale.CHINESE, Locale.ENGLISH, Locale.FRENCH,Locale.GERMAN, Locale.ITALIAN, Locale.JAPANESE,Locale.KOREAN, Locale.SIMPLIFIED_CHINESE, andLocale.TRADITIONAL_CHINESE

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 14: Internationalization

Displaying Time and Date

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 15: Internationalization

Displaying Date and Time

Java provides a system independent encapsulation of date and time in the java.util.Date class.

It also provides java.util.TimeZone class for dealing with time zones.

java.util.Calendar can be used for extracting detailed information from Date.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 16: Internationalization

TimeZone Class

TimeZone is an abstract class.

Constructor:There is only default Constructor for TimeZone.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 17: Internationalization

Methods of TimeZone Class static String[] getAvailableIDs()

used to find all the available time-zones supported in Java.

static TimeZone getDefault()used to obtain the default time-zone on host machine.

static TimeZone getTimeZone(String ID)used to get TimeZone object for specified TimeZoneID.

String getID()This method gets the ID of this time zone.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 18: Internationalization

DateFormat Class An abstract class for date/time formatting subclasses which formats

and parses dates or time in a language-independent manner.

Constructor:protected DateFormat()

Constants: SHORT is completely numeric, such as 01.12.52 or 3:30pm MEDIUM is longer, such as Jan 12, 1952 LONG is even longer, such as January 12, 1952 or 3:30:32pm FULL is pretty completely specified, such as Tuesday, April 12, 1952

AD or 3:30:42pm IST.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 19: Internationalization

Methods of DateFormat Class

String format(Date date)Formats a Date into a date/time string.

static DateFormat getInstance() Get a default date/time formatter that uses the SHORT style for both the date and the time.

void setTimeZone(TimeZone zone) Sets the time zone for the calendar of this DateFormat object.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 20: Internationalization

Methods of DateFormat Class

static DateFormat getDateInstance() Gets the date formatter with the default formatting style for the default locale.

static DateFormat getDateInstance(int style) Gets the date formatter with the given formatting style for the default locale.

static DateFormat getDateInstance(int style, Locale aLocale) Gets the date formatter with the given formatting style for the given locale.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 21: Internationalization

Methods of DateFormat Class static DateFormat getDateTimeInstance()

Gets the date/time formatter with the default formatting style for the default locale.

static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) Gets the date/time formatter with the given date and time formatting styles

for the default locale.

static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)

Gets the date/time formatter with the given formatting styles for the given locale.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 22: Internationalization

SimpleDateFormat Class Defined in java.text package. Enables to choose any user-defined pattern for date and time

formatting.

public SimpleDateFormat(String Pattern)

Example: SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");

Note: G represents Era designator, and z is TimeZone.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 23: Internationalization

DateFormatSymbols Class Constructors:

DateFormatSymbols()DateFormatSymbols(Locale locale)

Methods:String[] getAmPmStrings()String[] getEras()String[] getMonths()

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 24: Internationalization

Methodsvoid setMonths(String[] newMonths)

String[] getShortMonths()

void setShortMonths(String[] newShortMonths)

String[] getWeekdays()

void setWeekdays(String[] newWeekdays)

String[] getShotWeekdays()

void setShortWeekdays(String[] newWeekdays)

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 25: Internationalization

Formatting numbers

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 26: Internationalization

Formatting Numbers Numbers are formatted using an abstract base class

java.text.NumberFormat .

Formatting numbers is highly locale dependent.

Number: 5000.555United States: 5,000.555France: 5000,555Germany: 5.000,555

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 27: Internationalization

Methods getInstance(): NumberFormat getInstance(locale: Locale): NumberFormat getIntegerInstance(): NumberFormat getIntegerInstance(locale: Locale): NumberFormat getCurrencyInstance(): NumberFormat getNumberInstance(): NumberFormat getNumberInstance(locale: Locale): NumberFormat getPercentInstance(): NumberFormat getPercentInstance(locale: Locale): NumberFormat

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 28: Internationalization

Methods format (number: double): String format (number: long): String getMaximumFractionDigits(): int setMaximumFractionDigits(newValue: int): void getMinimumFractionDigits(): int setMinimumFractionDigits(newValue: int): void getMaximumIntegerDigits(): int setMaximumIntegerDigits(newValue: int): void getMinimumIntegerDigits(): int setMinimumIntegerDigits(newValue: int): void parse(source: String): Number getAvailableLocales(): Locale[]

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 29: Internationalization

Formatting Numbers

Plain Number Format:NumberFormat nf = NumberFormat.getInstance(Locale l);System.out.println(nf.format(1010.1055));

Currency Format:NumberFormat nf = NumberFormat.getCurrencyInstance(Locale l);

Percent Format:NumberFormat nf = NumberFormat.getPercentInstance(Locale l);

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 30: Internationalization

Parsing Numbers format(numericalValue) method is used to format a number into

a string.

parse(String) method can be used to convert a formatted plain number, currency value, or percent number with the conventions of a certain locale into an instance of java.lang.Number.

The parse method throws a java.text.ParseException, if parsing fails.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 31: Internationalization

ExampleU.S. $5,000.56 can be parsed into a number using the following statements:

NumberFormat currencyFormat =NumberFormat.getCurrencyInstance(Locale.US);

try {Number number = currencyFormat.parse("$5,000.56");System.out.println(number.doubleValue());

}catch (java.text.ParseException ex) {

System.out.println("Parse failed");}

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 32: Internationalization

DecimalFormat Class

We can use the applyPattern(String pattern) method of the DecimalFormat class to specify the patterns for displaying the number.

A pattern can specify the minimum number of digits before the decimal point and the maximum number of digits after the decimal point.

The characters '0‘ and '#' are used to specify a required digit and an optional digit, respectively.

The optional digit is not displayed if it is zero.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 33: Internationalization

Example The pattern "00.0##" indicates minimum two digits before the

decimal point and maximum three digits after the decimal point.

If there are more actual digits before the decimal point, all of them are displayed.

If there are more than three digits after the decimal point, the number of digits is rounded.

Example: 1987.16920 will be formatted as: 1987.1691389.2387 will be formatted as: 1389.239

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 34: Internationalization

Resource Bundles

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 35: Internationalization

Resource Bundles A resource bundle is a Java class file or text file that provides

locale-specific information.

This information can be accessed by Java programs dynamically.

Resource bundles allows to write programs that separate the locale-sensitive part of our code from the locale-independent part.

When a locale-specific resource is needed, our program can load it from the resource bundle appropriate for the desired locale.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 36: Internationalization

Resource Bundles The resources are placed inside the classes that extend the

ResourceBundle class or a subclass of ResourceBundle.

Resource bundles contain key/value pairs.

Each key uniquely identifies a locale-specific object in the bundle.

Key is used to retrieve the object.

ListResourceBundle is a subclass of ResourceBundle that is often used to simplify the creation of resource bundles.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 37: Internationalization

Examplepublic class MyResource extends java.util.ListResourceBundle

{static final Object[][] contents = {

{"nationalFlag", "us.gif"},{"nationalAnthem", "us.au"},{"nationalColor", Color.red},{"annualGrowthRate", new Double(7.8)}

};public Object[][] getContents() {

return contents; }}

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 38: Internationalization

Properties File If all the resources are strings, they can be placed in a convenient

text file with the extension .properties.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 39: Internationalization

Resource Bundle Naming Conventions1. BaseName_language_country_variant.class2. BaseName_language_country.class3. BaseName_language.class4. BaseName.class5. BaseName_language_country_variant.properties6. BaseName_language_country.properties7. BaseName_language.properties8. BaseName.properties

The getBundle method attempts to load the class that matches the specified locale by language, country, and variant by searching the file names in the order shown above.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 40: Internationalization

Retrieving Values from Resource Bundle To retrieve values from a ResourceBundle in a program, we need

to create an instance of ResourceBundle using one of the following two static methods:

public static final ResourceBundle getBundle(String baseName) throws MissingResourceException

public static final ResourceBundle getBundle (String baseName, Locale locale) throws MissingResourceException

The first method returns a ResourceBundle for the default locale, and second returns a ResourceBundle for the specified locale.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 41: Internationalization

getObject() method can be used to retrieve the value according to the key.

ResourceBundle res = ResourceBundle.getBundle("MyResource");String flagFile = (String)res.getObject("nationalFlag");

If the resource value is a string, then getString() method is more convenient to use.

String flagFile = res.getString("nationalFlag");

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 42: Internationalization

Character Encoding

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 43: Internationalization

Character Encoding Java programs use Unicode. When we read a character using text

I/O, the Unicode code of the character is returned.

The encoding of the character in the file may be different.

Java automatically converts it to the Unicode.

When we write a character using text I/O, Java automatically converts the Unicode of the character to the encoding specified for the file.

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 44: Internationalization

Character Encoding We can specify an encoding scheme using a constructor of

Scanner/PrintWriter for text I/O, as follows:

public Scanner(File file, String encodingName)public PrintWriter(File file, String encodingName)

Encoding Names: https://docs.oracle.com/javase/1.5.0/docs/guide/intl/encoding.doc.html

Ravi Kant Sahu, Asst. Professor @ Lovely Professional University, Punjab (India)

Page 45: Internationalization
Page 46: Internationalization

All the Best for

Mid-Term exams