Internationalization

Preview:

Citation preview

Advanced Java Programming

Topic: Internationalization

ByRavi Kant Sahu

Asst. Professor, LPU

Contents

Introduction Locale Class Displaying Date and Time Formatting Numbers Resource Bundles

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

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)

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)

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)

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)

LocaLe cLass

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

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)

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)

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)

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)

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)

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)

Displaying Time and Date

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

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)

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)

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)

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)

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)

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)

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)

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)

DateFormatSymbols Class Constructors:

DateFormatSymbols()DateFormatSymbols(Locale locale)

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

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

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)

Formatting numbers

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

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)

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)

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)

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)

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)

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)

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)

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)

Resource Bundles

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

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)

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)

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)

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)

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)

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)

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)

Character Encoding

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

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)

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)

All the Best for

Mid-Term exams

Recommended