Index: lutinutil/src/java/org/codelutin/i18n/I18n.java diff -u lutinutil/src/java/org/codelutin/i18n/I18n.java:1.8 lutinutil/src/java/org/codelutin/i18n/I18n.java:1.9 --- lutinutil/src/java/org/codelutin/i18n/I18n.java:1.8 Fri Feb 8 15:17:00 2008 +++ lutinutil/src/java/org/codelutin/i18n/I18n.java Sun Feb 10 16:01:47 2008 @@ -23,9 +23,9 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.8 $ + * @version $Revision: 1.9 $ * - * Mise a jour: $Date: 2008-02-08 15:17:00 $ + * Mise a jour: $Date: 2008-02-10 16:01:47 $ * par : $Author: tchemit $ */ @@ -59,34 +59,28 @@ */ public class I18n { - private static final LanguageEnum DEFAULT_LANGUAGE= LanguageEnum.en; + static final LanguageEnum DEFAULT_LANGUAGE= LanguageEnum.en; - private static final CountryEnum DEFAULT_COUNTRY= CountryEnum.GB; + static final CountryEnum DEFAULT_COUNTRY= CountryEnum.GB; - private static final String ISO_8859_1_ENCONDING = "ISO-8859-1"; + static final String ISO_8859_1_ENCONDING = "ISO-8859-1"; - private static final String UTF_8_ENCONDING = "UTF-8"; + static final String UTF_8_ENCONDING = "UTF-8"; - /** - * Initialize the library with default language {@link #DEFAULT_LANGUAGE} - * and default country {@link #DEFAULT_COUNTRY} with - * ISO-8859-1 enconding - */ - public static void initISO88591() { - String lang = System.getProperty("user.language", DEFAULT_LANGUAGE.toString()); - String country = System.getProperty("user.country", DEFAULT_COUNTRY.toString()); - initISO88591(lang, country); - } + /** Filtre a appliquer avant de retourner les chaines */ + protected static I18nFilter filter; /** - * Initialize the library for given language with - * ISO-8859-1 enconding + * l'objet langue à utiliser * - * @param language language to use + * @deprecated Utiliser plutot LanguageManager.getLanguage() a la place + * par l'intermediare du getter getLanguage() */ - public static void initISO88591(String language) { - init0(language, ISO_8859_1_ENCONDING); - } + protected static Language language; + + /** Indique le chamin du fichier dans lequel ecrire les entrees non trouvees */ + protected static String recordFilePath; + /** * Initialize the library for given language and given * country with ISO-8859-1 enconding @@ -95,49 +89,69 @@ * @param country country to use */ public static void initISO88591(String language, String country) { - init0(language, country, ISO_8859_1_ENCONDING); + setLanguage( + LanguageEnum.valueOf(language, DEFAULT_LANGUAGE), + country == null ? null : CountryEnum.valueOf(country, DEFAULT_COUNTRY), + ISO_8859_1_ENCONDING + ); } /** - * Initialize the library with default language {@link #DEFAULT_LANGUAGE} - * and default country {@link #DEFAULT_COUNTRY} with - * UTF-8 enconding + * Initialize the library for given language and + * given country with UTF-81 enconding + * + * @param language language to use + * @param country country to use */ - public static void initUTF8() { - String lang = System.getProperty("user.language", DEFAULT_LANGUAGE.toString()); - String country = System.getProperty("user.country", DEFAULT_COUNTRY.toString()); - initUTF8(lang, country); + public static void initUTF8(String language, String country) { + setLanguage( + LanguageEnum.valueOf(language, DEFAULT_LANGUAGE), + country == null ? null : CountryEnum.valueOf(country, DEFAULT_COUNTRY), + UTF_8_ENCONDING + ); } /** * Initialize the library for given language with - * UTF-8 enconding + * ISO-8859-1 enconding * * @param language language to use */ - public static void initUTF8(String language) { - init0(language, UTF_8_ENCONDING); + public static void initISO88591(String language) { + initISO88591(language,null); } /** - * Initialize the library for given language and - * given country with UTF-81 enconding + * Initialize the library for given language with + * UTF-8 enconding * * @param language language to use - * @param country country to use */ - public static void initUTF8(String language, String country) { - init0(language, country, UTF_8_ENCONDING); + public static void initUTF8(String language) { + initUTF8(language, null); } - /** Filtre a appliquer avant de retourner les chaines */ - protected static I18nFilter filter = null; - - /** l'objet langue à utiliser */ - protected static Language language = null; + /** + * Initialize the library with default language {@link #DEFAULT_LANGUAGE} + * and default country {@link #DEFAULT_COUNTRY} with + * ISO-8859-1 enconding + */ + public static void initISO88591() { + String lang = System.getProperty("user.language", DEFAULT_LANGUAGE.toString()); + String country = System.getProperty("user.country", DEFAULT_COUNTRY.toString()); + initISO88591(lang, country); + } - /** Indique le chamin du fichier dans lequel ecrire les entrees non trouvees */ - protected static String recordFilePath = null; + /** + * Initialize the library with default language {@link #DEFAULT_LANGUAGE} + * and default country {@link #DEFAULT_COUNTRY} with + * UTF-8 enconding + */ + public static void initUTF8() { + String lang = System.getProperty("user.language", DEFAULT_LANGUAGE.toString()); + String country = System.getProperty("user.country", DEFAULT_COUNTRY.toString()); + initUTF8(lang, country); + } /** * Retourne la chaine traduite si possible. @@ -147,25 +161,25 @@ * sinon. */ public static String _(String message) { - if (language == null) { + if (getLanguage() == null) { return applyFilter(message); } - return applyFilter(I18n.language.translate(message)); + return applyFilter(getLanguage().translate(message)); } /** * Retourne la chaine traduite si possible. * - * @param message message formate avec la m?me syntaxe que {@link - * java.text.MessageFormat} + * @param message message formate avec la m?me syntaxe que {@link MessageFormat} * @param args les parametres pour le message. * @return la traduction si possible ou la chaine passee en parametre * sinon. */ public static String _(String message, Object... args) { String result = message; + Language language = getLanguage(); if (language != null) { - result = I18n.language.translate(message); + result = language.translate(message); } try { return applyFilter(MessageFormat.format(result, args)); @@ -194,7 +208,7 @@ * Retourne la chaine passée en argument. * * @param message message formaté avec la même syntaxe que {@link - * java.text.MessageFormat} + * MessageFormat} * @param args les paramètres pour le message. * @return le message passé en argument mais formatté * avec les paramètres @@ -209,67 +223,57 @@ } /** - * Change le filtre des chaines traduites - * - * @param filter l'objet filtre a utiliser - */ - public static void setFilter(I18nFilter filter) { - I18n.filter = filter; - } - - public static void setRecordFilePath(String recordFilePath) { - I18n.recordFilePath = recordFilePath; - } - - /** * Applique le filtre s'il y en a un * * @param message le message qui devrait etre retourne avant application du * filtre. - * @return TODO Description of the Return Value + * @return le message filtre */ protected static String applyFilter(String message) { - if (filter != null) { - return filter.applyFilter(message); + if (getFilter() != null) { + return getFilter().applyFilter(message); } return message; } - /** - * Initialise la librairie. - * - * @param language une chaine representant la langue a utiliser fr, en, ... - * @param toEncoding l'encoding de destination - * @see LanguageEnum - */ - protected static void init0(String language, String toEncoding) { - LanguageEnum languageVal = LanguageEnum.valueOf(language,DEFAULT_LANGUAGE); - setLanguage(languageVal, toEncoding); + protected static Language getLanguage() { + //TODO supprimer le test, des que l'on utilisera plus le champs language + //TODO i.e apres prochaine release lutinutil + return language!=null?language:LanguageManager.getLanguage(); } - /** - * Initialise la librairie. - * - * @param language une chaine representant la langue à utiliser fr, en (en minuscule), ... - * @param country le pays (la norme - * @param toEncoding l'encoding de destination - * @see LanguageEnum - * @see CountryEnum - */ - protected static void init0(String language, String country, String toEncoding) { - LanguageEnum languageValue = LanguageEnum.valueOf(language,DEFAULT_LANGUAGE); - CountryEnum countryValue = CountryEnum.valueOf(country,DEFAULT_COUNTRY); - setLanguage(languageValue, countryValue, toEncoding); + protected static I18nFilter getFilter() { + return filter; + } + + public static String getRecordFilePath() { + return recordFilePath; + } + + protected static void setLanguage(LanguageEnum language, CountryEnum country, String toEncoding) { + Locale newLocale = newLocale(language, country); + // delegate to LanguageManager + LanguageManager.setLanguage(newLocale,toEncoding); } /** - * Initialise la librairie. + * Change le filtre des chaines traduites * - * @param language une chaine representant la langue à utiliser fr, en, ... - * @deprecated voir le bug sur {@link I18nFileReader#load(InputStream, String)} + * @param filter l'objet filtre a utiliser */ - public static void init(String language) { - I18n.language = new Language(new Locale(language)); + public static void setFilter(I18nFilter filter) { + I18n.filter = filter; + } + + public static void setRecordFilePath(String recordFilePath) { + I18n.recordFilePath = recordFilePath; + } + + protected static Locale newLocale(LanguageEnum language, CountryEnum country) { + if (country == null) { + return new Locale(language.toString()); + } + return new Locale(language.toString(), country.toString()); } /** @@ -280,25 +284,18 @@ * @deprecated voir le bug sur {@link I18nFileReader#load(InputStream, String)} */ public static void init(String language, String country) { - I18n.language = new Language(new Locale(language, country)); + Locale locale = new Locale(language, country); + I18n.language = new Language(locale,UTF_8_ENCONDING); } - protected static void setLanguage(LanguageEnum language, String toEncoding) { - Language oldLanguage = I18n.language; - Locale newLocale = new Locale(language.name()); - changeLanguage(toEncoding, oldLanguage, newLocale); - } - - protected static void setLanguage(LanguageEnum language, CountryEnum country, String toEncoding) { - Language oldLanguage = I18n.language; - Locale newLocale = new Locale(language.name(), country.name()); - changeLanguage(toEncoding, oldLanguage, newLocale); - } - - protected static void changeLanguage(String toEncoding, Language oldLanguage, Locale newLocale) { - if (oldLanguage==null || !oldLanguage.getLocale().equals(newLocale)) { - I18n.language = new Language(newLocale, toEncoding); - } + /** + * Initialise la librairie. + * + * @param language une chaine representant la langue à utiliser fr, en, ... + * @deprecated voir le bug sur {@link I18nFileReader#load(InputStream, String)} + */ + public static void init(String language) { + init(language,null); } - + } //I18n