1 32 33 package it.businesslogic.ireport.util; 34 35 import it.businesslogic.ireport.gui.MainFrame; 36 import java.util.*; 37 import java.util.jar.*; 38 import java.net.*; 39 import java.io.*; 40 41 45 public class I18n 46 { 47 48 public static final String localPackageName = "it/businesslogic/ireport/locale/"; 49 public static final String baseName = "Ireport"; 50 private static java.util.ResourceBundle oLanguage = null; 51 52 public static java.util.Vector languageChangedListeners = null; 53 54 static 55 { 56 57 languageChangedListeners = new Vector(); 58 } 59 60 public static void addOnLanguageChangedListener(LanguageChangedListener listener) 61 { 62 languageChangedListeners.add( listener ); 63 } 64 65 72 73 123 124 125 public static java.util.List getListOfAvailLanguages() 127 { 128 java.util.List supportedLocales = new java.util.ArrayList (); 129 try 130 { 131 Set names = Misc.getResoucesInPackage( localPackageName ); 132 Iterator it = names.iterator(); 133 while( it.hasNext() ) 134 { 135 String n = (String )it.next(); 136 137 144 String lang = n.substring( n.lastIndexOf('/')+1 ); 145 146 if ( lang.indexOf(".properties") < 0 ) 148 { 149 continue; } 152 153 lang = lang.substring(0, lang.indexOf(".properties") ); 154 155 StringTokenizer tokenizer = new StringTokenizer( lang, "_"); 156 if ( tokenizer.countTokens() <= 1 ) 157 { 158 continue; } 162 163 String language = ""; 164 String country = ""; 165 String variant = ""; 166 167 String [] parts = new String [tokenizer.countTokens()]; 168 171 int i = 0; 173 while (tokenizer.hasMoreTokens() ) 174 { 175 String token = tokenizer.nextToken(); 176 177 179 switch (i) 180 { 181 case 0: 182 break; 184 case 1: 185 language = token; 186 break; 187 case 2: 188 country = token; 189 break; 190 case 3: 191 variant = token; 192 break; 193 default: 194 } 196 i++; 197 198 } 199 200 Locale model = new Locale( language, country, variant ); 201 supportedLocales.add( model ); 202 203 } 204 } 205 catch(Exception e) 206 { 207 e.printStackTrace(); 208 } 209 210 Collections.sort( supportedLocales, new Comparator() 213 { 214 public int compare(Object lhs, Object rhs) 215 { 216 String ls = ((Locale)lhs).getDisplayLanguage(); 219 String rs = ((Locale)rhs).getDisplayLanguage(); 220 221 if (ls.equals("pap")) 224 { 225 ls = "Papiamentu"; 226 } 227 if (rs.equals("pap")) 228 { 229 rs = "Papiamentu"; 230 } 231 232 233 return ls.compareTo( rs ); 235 } 236 }); 237 238 return supportedLocales; 239 } 240 241 242 243 266 267 private static Locale currentLocale = Locale.ENGLISH; 269 270 public static void setCurrentLocale( String language ) 271 { 272 setCurrentLocale(language, null); 273 } 274 275 public static void setCurrentLocale( String language, String country ) 276 { 277 if(language != null && !language.equals("")) 278 { 279 if(country != null && !country.equals("")) 280 { 281 setCurrentLocale(new java.util.Locale (language, country)); 282 } 283 else 284 { 285 setCurrentLocale(new java.util.Locale (language)); 286 } 287 } 288 else 289 { 290 setCurrentLocale(java.util.Locale.getDefault()); 291 } 292 293 } 294 295 public static void setCurrentLocale( Locale locale ) 296 { 297 currentLocale=locale; 298 oLanguage = null; 299 300 Enumeration enum_listeners = languageChangedListeners.elements(); 301 while (enum_listeners.hasMoreElements()) 302 { 303 try 304 { 305 ((LanguageChangedListener)(enum_listeners.nextElement())).languageChanged(new LanguageChangedEvent(locale)); 306 } 307 catch (Exception ex) 308 {} 309 } 310 } 311 312 public static Locale getCurrentLocale() 313 { 314 return currentLocale; 315 } 316 317 322 public static String getString(String cID) 323 { 324 return getString(cID, currentLocale ); 325 } 326 327 public static String getString(String cID,String defaultValue) 328 { 329 return getString(cID, currentLocale, defaultValue ); 330 } 331 332 337 public static String getFormattedString(String cID, String defaultValue, Object [] args) 338 { 339 String pattern = getString(cID, getCurrentLocale(), defaultValue ); 340 java.text.MessageFormat mf = new java.text.MessageFormat (pattern, I18n.getCurrentLocale()); 341 return mf.format(args); 342 } 343 344 345 private static String getString(String cID, Locale currentLocale) 346 { 347 if (currentLocale == null) 348 { 349 currentLocale = Locale.getDefault(); 350 } 351 if(oLanguage == null) 352 { 353 oLanguage = java.util.ResourceBundle.getBundle( localPackageName + baseName, 354 currentLocale); 355 } 356 357 try { 358 return oLanguage.getString(cID); 359 } catch (Exception ex) 360 { 361 return cID; 362 } 363 } 364 365 public static String getString(String cID, Locale currentLocale, String defaultValue) 366 { 367 try 368 { 369 if(oLanguage == null) 370 { 371 if (MainFrame.getMainInstance() != null) 372 { 373 oLanguage = java.util.ResourceBundle.getBundle( localPackageName + baseName, 374 currentLocale, MainFrame.getMainInstance().getReportClassLoader()); 375 } 376 else 377 { 378 oLanguage = java.util.ResourceBundle.getBundle( localPackageName + baseName, 379 currentLocale); 380 } 381 } 382 return oLanguage.getString(cID); 383 } 384 catch (MissingResourceException ex) 385 { 386 System.out.println("Can't find the translation for key = " + cID +": using default (" + defaultValue + ")"); 387 } 388 catch (Exception ex) 389 { 390 System.out.println("Exception loading cID = " + cID +": " + ex.getMessage()); 391 } 392 return defaultValue; 393 } 394 395 396 public static String getCurrentLocaleID() 397 { 398 return ""; 400 } 401 } 402 | Popular Tags |