Print this page
rev 5696 : 6336885: RFE: Locale Data Deployment Enhancements
4609153: Provide locale data for Indic locales
5104387: Support for gl_ES locale (galician language)
6337471: desktop/system locale preferences support
7056139: (cal) SPI support for locale-dependent Calendar parameters
7058206: Provide CalendarData SPI for week params and display field value names
7073852: Support multiple scripts for digits and decimal symbols per locale
7079560: [Fmt-Da] Context dependent month names support in SimpleDateFormat
7171324: getAvailableLocales() of locale sensitive services should return the actual availability of locales
7151414: (cal) Support calendar type identification
7168528: LocaleServiceProvider needs to be aware of Locale extensions
7171372: (cal) locale's default Calendar should be created if unknown calendar is specified
Summary: JEP 127: Improve Locale Data Packaging and Adopt Unicode CLDR Data (part 1 w/o packaging changes. by Naoto Sato and Masayoshi Okutsu)

Split Close
Expand all
Collapse all
          --- old/src/solaris/native/java/lang/java_props_macosx.c
          +++ new/src/solaris/native/java/lang/java_props_macosx.c
↓ open down ↓ 36 lines elided ↑ open up ↑
  37   37  
  38   38  // need dlopen/dlsym trick to avoid pulling in JavaRuntimeSupport before libjava.dylib is loaded
  39   39  static void *getJRSFramework() {
  40   40      static void *jrsFwk = NULL;
  41   41      if (jrsFwk == NULL) {
  42   42         jrsFwk = dlopen("/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/JavaRuntimeSupport", RTLD_LAZY | RTLD_LOCAL);
  43   43      }
  44   44      return jrsFwk;
  45   45  }
  46   46  
  47      -static char *getPosixLocale(int cat) {
       47 +char *getPosixLocale(int cat) {
  48   48      char *lc = setlocale(cat, NULL);
  49   49      if ((lc == NULL) || (strcmp(lc, "C") == 0)) {
  50   50          lc = getenv("LANG");
  51   51      }
  52   52      if (lc == NULL) return NULL;
  53   53      return strdup(lc);
  54   54  }
  55   55  
  56   56  #define LOCALEIDLENGTH  128
  57      -char *setupMacOSXLocale(int cat) {
       57 +char *getMacOSXLocale(int cat) {
  58   58      switch (cat) {
  59   59      case LC_MESSAGES:
  60   60          {
  61   61              void *jrsFwk = getJRSFramework();
  62      -            if (jrsFwk == NULL) return getPosixLocale(cat);
       62 +            if (jrsFwk == NULL) return NULL;
  63   63  
  64   64              char *(*JRSCopyPrimaryLanguage)() = dlsym(jrsFwk, "JRSCopyPrimaryLanguage");
  65   65              char *primaryLanguage = JRSCopyPrimaryLanguage ? JRSCopyPrimaryLanguage() : NULL;
  66      -            if (primaryLanguage == NULL) return getPosixLocale(cat);
       66 +            if (primaryLanguage == NULL) return NULL;
  67   67  
  68   68              char *(*JRSCopyCanonicalLanguageForPrimaryLanguage)(char *) = dlsym(jrsFwk, "JRSCopyCanonicalLanguageForPrimaryLanguage");
  69   69              char *canonicalLanguage = JRSCopyCanonicalLanguageForPrimaryLanguage ?  JRSCopyCanonicalLanguageForPrimaryLanguage(primaryLanguage) : NULL;
  70   70              free (primaryLanguage);
  71      -            if (canonicalLanguage == NULL) return getPosixLocale(cat);
  72   71  
  73      -            void (*JRSSetDefaultLocalization)(char *) = dlsym(jrsFwk, "JRSSetDefaultLocalization");
  74      -            if (JRSSetDefaultLocalization) JRSSetDefaultLocalization(canonicalLanguage);
  75      -
  76   72              return canonicalLanguage;
  77   73          }
  78   74          break;
  79   75      default:
  80   76          {
  81   77              char localeString[LOCALEIDLENGTH];
  82   78              if (CFStringGetCString(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
  83   79                                     localeString, LOCALEIDLENGTH, CFStringGetSystemEncoding())) {
  84   80                  return strdup(localeString);
  85   81              }
  86   82          }
  87   83          break;
  88   84      }
  89   85  
  90   86      return NULL;
  91   87  }
  92   88  
       89 +char *setupMacOSXLocale(int cat) {
       90 +    char * ret = getMacOSXLocale(cat);
       91 +
       92 +    if (cat == LC_MESSAGES && ret != NULL) {
       93 +        void *jrsFwk = getJRSFramework();
       94 +        if (jrsFwk != NULL) {
       95 +            void (*JRSSetDefaultLocalization)(char *) = dlsym(jrsFwk, "JRSSetDefaultLocalization");
       96 +            if (JRSSetDefaultLocalization) JRSSetDefaultLocalization(ret);
       97 +        }
       98 +    }
       99 +
      100 +    if (ret == NULL) {
      101 +        return getPosixLocale(cat);
      102 +    } else {
      103 +        return ret;
      104 +    }
      105 +}
      106 +
  93  107  /* There are several toolkit options on Mac OS X, so we should try to
  94  108   * pick the "best" one, given what we know about the environment Java
  95  109   * is running under
  96  110   */
  97  111  
  98  112  static PreferredToolkit getPreferredToolkitFromEnv() {
  99  113      char *envVar = getenv("AWT_TOOLKIT");
 100  114      if (envVar == NULL) return unset;
 101  115  
 102  116      if (strcasecmp(envVar, "CToolkit") == 0) return CToolkit;
↓ open down ↓ 248 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX