Mega Code Archive

 
Categories / Java Tutorial / Internationalization
 

Locale Sensitive Services SPI

SPI stands for service provider interface. You can write your own implementations for most locale sensitive classes in the java.text and java.util packages for locales that are not (yet) supported by the JRE. with the new Java 6 feature, you can provide locale-sensitive implementations for the following entities. Language and country names for the java.util.Locale class Time zone names for the java.util.TimeZone class Symbols for the java.util.Currency class java.text.BreakIterator java.text.Collator java.text.DateFormat java.text.NumberFormat java.text.DateFormatSymbols java.text.DecimalFormatSymbol import java.text.DateFormat; import java.text.SimpleDateFormat; import java.text.spi.DateFormatProvider; import java.util.Locale; import java.text.DateFormat; import java.util.Date; import java.util.Locale; public class AntarcticaLocaleDemo {     public static void main(String [] args) {         Date now = new Date();         DateFormat defaultFormat = DateFormat.getDateTimeInstance();         String defaultString = defaultFormat.format (now);         System.out.println ("Default : " + defaultString);         DateFormat antarcticaFormat =                 DateFormat.getDateTimeInstance (                 DateFormat.FULL, DateFormat.FULL,                 new Locale ("en", "AQ"));         String antarcticaString = antarcticaFormat.format (now);         System.out.println ("Antarctica: " + antarcticaString);     } } class DateFormatProviderImpl extends DateFormatProvider {     private Locale antarctica = new Locale ("en", "AQ");     public Locale[] getAvailableLocales() {         return new Locale [] {antarctica};     }     public DateFormat getTimeInstance(int style, Locale locale) {         if (locale.equals(antarctica)) {             return new SimpleDateFormat("HH.mm.ss");         }         return null;     }     public DateFormat getDateTimeInstance(int dateStyle, Locale locale) {         if (locale.equals(antarctica)) {             return new SimpleDateFormat("yyyy~MM~dd HH.mm.ss");         }         return null;     }     public DateFormat getDateTimeInstance(int dateStyle,            int timeStyle, Locale locale) {         if (locale.equals(antarctica)) {             return new SimpleDateFormat("yyyy~MM~dd HH.mm.ss");         }         return null;     }     @Override     public DateFormat getDateInstance(int style, Locale locale) {       if (locale.equals(antarctica)) {         return new SimpleDateFormat("yyyy~MM~dd HH.mm.ss");       }       return null;     } } //Reference: //Java 6 New Features: A Tutorial //by Budi Kurniawan  //Brainy Software Corp. 2006 //Chapter 4 - Networking //# ISBN-10: 0975212885 //# ISBN-13: 978-0975212882