1 14 package org.compiere.util; 15 16 import java.awt.ComponentOrientation ; 17 import java.text.DateFormat ; 18 import java.text.DecimalFormatSymbols ; 19 import java.text.SimpleDateFormat ; 20 import java.util.ArrayList ; 21 import java.util.Arrays ; 22 import java.util.Locale ; 23 24 import javax.print.attribute.standard.MediaSize ; 25 26 32 public class Language 33 { 34 40 41 42 public static final String AD_Language_en_US = "en_US"; 43 44 private static final String AD_Language_en_GB = "en_GB"; 45 private static final String AD_Language_en_AU = "en_AU"; 46 private static final String AD_Language_ca_ES = "ca_ES"; 47 private static final String AD_Language_hr_HR = "hr_HR"; 48 private static final String AD_Language_de_DE = "de_DE"; 49 private static final String AD_Language_it_IT = "it_IT"; 50 private static final String AD_Language_es_ES = "es_ES"; 51 private static final String AD_Language_fr_FR = "fr_FR"; 52 private static final String AD_Language_bg_BG = "bg_BG"; 53 private static final String AD_Language_th_TH = "th_TH"; 54 private static final String AD_Language_pl_PL = "pl_PL"; 55 private static final String AD_Language_zh_TW = "zh_TW"; 56 private static final String AD_Language_nl_NL = "nl_NL"; 57 private static final String AD_Language_no_NO = "np_NO"; 58 private static final String AD_Language_pt_BR = "pt_BR"; 59 private static final String AD_Language_ru_RU = "ru_RU"; 60 private static final String AD_Language_sv_SE = "sv_SE"; 61 private static final String AD_Language_vi_VN = "vi_VN"; 62 private static final String AD_Language_zh_CN = "zh_CN"; 63 private static final String AD_Language_dk_DK = "dk_DK"; 64 private static final String AD_Language_ml_ML = "ml_ML"; 65 private static final String AD_Language_fa_IR = "fa_IR"; 66 private static final String AD_Language_fi_FI = "fi_FI"; 67 private static final String AD_Language_ro_RO = "ro_RO"; 68 69 74 static private Language[] s_languages = { 75 new Language ("English", 76 AD_Language_en_US, Locale.US, null, null, 77 MediaSize.NA.LETTER), new Language ("\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438 (BG)", 81 AD_Language_bg_BG, new Locale ("bg","BG"), new Boolean (false), "dd/MM/yyyy", 82 MediaSize.ISO.A4), 83 new Language ("Catal\u00e0", 84 AD_Language_ca_ES, new Locale ("ca", "ES"), null, "dd/MM/yyyy", 85 MediaSize.ISO.A4), 86 new Language ("Deutsch", 87 AD_Language_de_DE, Locale.GERMANY, null, null, 88 MediaSize.ISO.A4), 89 new Language ("Dansk", 90 AD_Language_dk_DK, new Locale ("dk","DK"), new Boolean (false), "dd-MM-yyyy", 91 MediaSize.ISO.A4), 92 new Language ("English (AU)", 93 AD_Language_en_AU, new Locale ("en","AU"), null, "dd/MM/yyyy", 94 MediaSize.ISO.A4), 95 new Language ("English (UK)", 96 AD_Language_en_GB, Locale.UK, null, null, 97 MediaSize.ISO.A4), 98 new Language ("Espa\u00f1ol", 99 AD_Language_es_ES, new Locale ("es","ES"), new Boolean (false), "dd/MM/yyyy", 100 MediaSize.ISO.A4), 101 new Language ("Farsi", 102 AD_Language_fa_IR, new Locale ("fa","IR"), new Boolean (false), "dd-MM-yyyy", 103 MediaSize.ISO.A4), 104 new Language ("Finnish", 105 AD_Language_fi_FI, new Locale ("fi","FI"), new Boolean (true), "dd.MM.yyyy", 106 MediaSize.ISO.A4), 107 new Language ("Fran\u00e7ais", 108 AD_Language_fr_FR, Locale.FRANCE, null, null, MediaSize.ISO.A4), 110 new Language ("Hrvatski", 111 AD_Language_hr_HR, new Locale ("hr", "HR"), null, "dd.MM.yyyy", 112 MediaSize.ISO.A4), 113 new Language ("Italiano", 114 AD_Language_it_IT, Locale.ITALY, null, null, MediaSize.ISO.A4), 116 new Language ("Malay", 117 AD_Language_ml_ML, new Locale ("ml","ML"), new Boolean (false), "dd-MM-yyyy", 118 MediaSize.ISO.A4), 119 new Language ("Nederlands", 120 AD_Language_nl_NL, new Locale ("nl","NL"), new Boolean (false), "dd-MM-yyyy", 121 MediaSize.ISO.A4), 122 new Language ("Norsk", 123 AD_Language_no_NO, new Locale ("no","NO"), new Boolean (false), "dd/MM/yyyy", 124 MediaSize.ISO.A4), 125 new Language ("Polski", 126 AD_Language_pl_PL, new Locale ("pl","PL"), new Boolean (false), "dd-MM-yyyy", 127 MediaSize.ISO.A4), 128 new Language ("Portuguese (BR)", 129 AD_Language_pt_BR, new Locale ("pt","BR"), new Boolean (false), "dd/MM/yyyy", 130 MediaSize.ISO.A4), 131 new Language ("Rom\u00e2n\u0103", 132 AD_Language_ro_RO, new Locale ("ro","RO"), new Boolean (false), "dd.MM.yyyy", 133 MediaSize.ISO.A4), 134 new Language ("\u0420\u0443\u0441\u0441\u043a\u0438\u0439 (Russian)", 135 AD_Language_ru_RU, new Locale ("ru","RU"), new Boolean (false), "dd-MM-yyyy", 136 MediaSize.ISO.A4), 137 new Language ("Svenska", 138 AD_Language_sv_SE, new Locale ("sv","SE"), new Boolean (false), "dd.MM.yyyy", 139 MediaSize.ISO.A4), 140 new Language ("\u0e44\u0e17\u0e22 (TH)", 141 AD_Language_th_TH, new Locale ("th","TH"), new Boolean (false), "dd/MM/yyyy", 142 MediaSize.ISO.A4), 143 new Language ("Vi\u1EC7t Nam", 144 AD_Language_vi_VN, new Locale ("vi","VN"), new Boolean (false), "dd-MM-yyyy", 145 MediaSize.ISO.A4), 146 new Language ("\u7b80\u4f53\u4e2d\u6587 (CN)", 147 AD_Language_zh_CN, Locale.CHINA, null, "yyyy-MM-dd", 148 MediaSize.ISO.A4), 149 new Language ("\u7e41\u9ad4\u4e2d\u6587 (TW)", 150 AD_Language_zh_TW, Locale.TAIWAN, null, null, MediaSize.ISO.A4) 152 153 }; 154 155 private static Language s_defaultLanguage = s_languages[0]; 156 157 161 public static int getLanguageCount() 162 { 163 return s_languages.length; 164 } 166 171 public static Language getLanguage (int index) 172 { 173 if (index < 0 || index >= s_languages.length) 174 return s_defaultLanguage; 175 return s_languages[index]; 176 } 178 182 public static void addLanguage (Language language) 183 { 184 if (language == null) 185 return; 186 ArrayList list = new ArrayList (Arrays.asList(s_languages)); 187 list.add(language); 188 s_languages = new Language[list.size()]; 189 list.toArray(s_languages); 190 } 192 193 194 200 public static Language getLanguage (String langInfo) 201 { 202 String lang = langInfo; 203 if (lang == null || lang.length() == 0) 204 lang = System.getProperty("user.language", ""); 205 206 for (int i = 0; i < s_languages.length; i++) 208 { 209 if (lang.equals(s_languages[i].getName()) 210 || lang.equals(s_languages[i].getLanguageCode()) 211 || lang.equals(s_languages[i].getAD_Language())) 212 return s_languages[i]; 213 } 214 215 if (lang.length() == 5) { 218 String language = lang.substring(0,2); 219 String country = lang.substring(3); 220 Locale locale = new Locale (language, country); 221 System.out.println ("Adding Language=" + language + ", Country=" + country + ", Locale=" + locale); 222 Language ll = new Language (lang, lang, locale); 223 java.util.List list = new ArrayList (Arrays.asList(s_languages)); 225 list.add(ll); 226 s_languages = new Language [list.size()]; 227 list.toArray(s_languages); 228 return ll; 230 } 231 return s_defaultLanguage; 233 } 235 240 public static boolean isBaseLanguage (String langInfo) 241 { 242 if (langInfo == null || langInfo.length() == 0 243 || langInfo.equals(s_languages[0].getName()) 244 || langInfo.equals(s_languages[0].getLanguageCode()) 245 || langInfo.equals(s_languages[0].getAD_Language())) 246 return true; 247 return false; 248 } 250 254 public static Language getBaseLanguage() 255 { 256 return s_languages[0]; 257 } 259 263 public static String getBaseAD_Language() 264 { 265 return s_languages[0].getAD_Language(); 266 } 268 273 public static Locale getLocale (String langInfo) 274 { 275 return getLanguage(langInfo).getLocale(); 276 } 278 283 public static String getAD_Language (String langInfo) 284 { 285 return getLanguage(langInfo).getAD_Language(); 286 } 288 293 public static String getAD_Language (Locale locale) 294 { 295 if (locale != null) 296 for (int i = 0; i < s_languages.length; i++) 297 { 298 if (locale.equals(s_languages[i].getLocale())) 299 return s_languages[i].getAD_Language(); 300 } 301 return s_defaultLanguage.getAD_Language(); 302 } 304 309 public static String getName (String langInfo) 310 { 311 return getLanguage(langInfo).getName(); 312 } 314 319 public static boolean isDecimalPoint(String langInfo) 320 { 321 return getLanguage(langInfo).isDecimalPoint(); 322 } 324 328 public static String [] getNames() 329 { 330 String [] retValue = new String [s_languages.length]; 331 for (int i = 0; i < s_languages.length; i++) 332 retValue[i] = s_languages[i].getName(); 333 return retValue; 334 } 336 337 338 342 public static Language getLanguage () 343 { 344 return s_defaultLanguage; 345 } 347 351 public static void setLanguage (Language language) 352 { 353 if (language != null) 354 { 355 s_defaultLanguage = language; 356 System.out.println(s_defaultLanguage); 357 } 358 } 360 361 362 372 public Language (String name, String AD_Language, Locale locale, 373 Boolean decimalPoint, String javaDatePattern, MediaSize mediaSize) 374 { 375 if (name == null || AD_Language == null || locale == null) 376 throw new IllegalArgumentException ("Language - parameter is null"); 377 m_name = name; 378 m_AD_Language = AD_Language; 379 m_locale = locale; 380 m_decimalPoint = decimalPoint; 382 setDateFormat (javaDatePattern); 383 setMediaSize (mediaSize); 384 } 386 393 public Language (String name, String AD_Language, Locale locale) 394 { 395 this (name, AD_Language, locale, null, null, null); 396 } 398 399 400 private String m_name; 401 402 private String m_AD_Language; 403 404 private Locale m_locale; 405 private Boolean m_decimalPoint; 407 private Boolean m_leftToRight; 408 private SimpleDateFormat m_dateFormat; 409 private MediaSize m_mediaSize = MediaSize.ISO.A4; 410 411 416 public String getName() 417 { 418 return m_name; 419 } 421 426 public String getAD_Language() 427 { 428 return m_AD_Language; 429 } 431 435 public void setAD_Language (String AD_Language) 436 { 437 if (AD_Language != null) 438 { 439 m_AD_Language = AD_Language; 440 System.out.println(toString()); 441 } 442 } 444 448 public Locale getLocale() 449 { 450 return m_locale; 451 } 453 457 public void setLocale (Locale locale) 458 { 459 if (locale == null) 460 return; 461 m_locale = locale; 462 m_decimalPoint = null; } 465 470 public String getLanguageCode() 471 { 472 return m_locale.getLanguage(); 473 } 475 479 public boolean isLeftToRight() 480 { 481 if (m_leftToRight == null) 482 m_leftToRight = new Boolean (ComponentOrientation.getOrientation(m_locale).isLeftToRight()); 484 return m_leftToRight.booleanValue(); 485 } 487 491 public boolean isDecimalPoint() 492 { 493 if (m_decimalPoint == null) 494 { 495 DecimalFormatSymbols dfs = new DecimalFormatSymbols (m_locale); 496 m_decimalPoint = new Boolean (dfs.getDecimalSeparator() == '.'); 497 } 498 return m_decimalPoint.booleanValue(); 499 } 501 505 public boolean isBaseLanguage() 506 { 507 return this.equals(getBaseLanguage()); 508 } 510 518 public void setDateFormat (String javaDatePattern) 519 { 520 if (javaDatePattern == null) 521 return; 522 m_dateFormat = (SimpleDateFormat )DateFormat.getDateInstance 523 (DateFormat.SHORT, m_locale); 524 try 525 { 526 m_dateFormat.applyPattern(javaDatePattern); 527 } 528 catch (Exception e) 529 { 530 System.err.println("Language.setDateFormat " + javaDatePattern + " - " + e); 531 m_dateFormat = null; 532 } 533 } 535 541 public SimpleDateFormat getDateFormat() 542 { 543 if (m_dateFormat == null) 544 { 545 m_dateFormat = (SimpleDateFormat )DateFormat.getDateInstance 546 (DateFormat.SHORT, m_locale); 547 String sFormat = m_dateFormat.toPattern(); 548 if (sFormat.indexOf("MM") == -1 && sFormat.indexOf("dd") == -1) 550 { 551 String nFormat = ""; 552 for (int i = 0; i < sFormat.length(); i++) 553 { 554 if (sFormat.charAt(i) == 'M') 555 nFormat += "MM"; 556 else if (sFormat.charAt(i) == 'd') 557 nFormat += "dd"; 558 else 559 nFormat += sFormat.charAt(i); 560 } 561 m_dateFormat.applyPattern(nFormat); 563 } 564 if (m_dateFormat.toPattern().length() != 8) 566 m_dateFormat.applyPattern("yyyy-MM-dd"); 567 568 if (m_dateFormat.toPattern().indexOf("yyyy") == -1) 570 { 571 sFormat = m_dateFormat.toPattern(); 572 String nFormat = ""; 573 for (int i = 0; i < sFormat.length(); i++) 574 { 575 if (sFormat.charAt(i) == 'y') 576 nFormat += "yy"; 577 else 578 nFormat += sFormat.charAt(i); 579 } 580 m_dateFormat.applyPattern(nFormat); 581 } 582 m_dateFormat.setLenient(true); 583 } 584 return m_dateFormat; 585 } 587 593 public SimpleDateFormat getDateTimeFormat() 594 { 595 SimpleDateFormat retValue = (SimpleDateFormat )DateFormat.getDateTimeInstance 596 (DateFormat.MEDIUM, DateFormat.LONG, m_locale); 597 return retValue; 599 } 601 606 public SimpleDateFormat getTimeFormat() 607 { 608 return (SimpleDateFormat )DateFormat.getTimeInstance 609 (DateFormat.LONG, m_locale); 610 } 612 617 public String getDBdatePattern() 618 { 619 return getDateFormat().toPattern().toUpperCase(m_locale); 620 } 622 626 public MediaSize getMediaSize() 627 { 628 return m_mediaSize; 629 } 631 635 public void setMediaSize (MediaSize size) 636 { 637 if (size != null) 638 m_mediaSize = size; 639 } 641 645 public String toString() 646 { 647 StringBuffer sb = new StringBuffer ("Language=["); 648 sb.append(m_name).append(",Locale=").append(m_locale.toString()) 649 .append(",AD_Language=").append(m_AD_Language) 650 .append(",DatePattern=").append(getDBdatePattern()) 651 .append(",DecimalPoint=").append(isDecimalPoint()) 652 .append("]"); 653 return sb.toString(); 654 } 656 660 public int hashCode() 661 { 662 return m_AD_Language.hashCode(); 663 } 665 671 public boolean equals(Object obj) 672 { 673 if (obj instanceof Language) 674 { 675 Language cmp = (Language)obj; 676 if (cmp.getAD_Language().equals(m_AD_Language)) 677 return true; 678 } 679 return false; 680 } 682 683 684 688 public static void main(String [] args) 689 { 690 System.out.println(Locale.TRADITIONAL_CHINESE); 691 System.out.println(Locale.TAIWAN); 692 System.out.println(Locale.SIMPLIFIED_CHINESE); 693 System.out.println(Locale.CHINESE); 694 System.out.println(Locale.PRC); 695 } 696 697 }
| Popular Tags
|