jdk/src/share/classes/sun/util/locale/LanguageTag.java
changeset 8149 768769e3cddd
parent 6501 684810d882b3
child 9035 1255eb81cc2f
child 9224 75c0420badef
equal deleted inserted replaced
8148:ff3d90bb0503 8149:768769e3cddd
   419         String language = baseLocale.getLanguage();
   419         String language = baseLocale.getLanguage();
   420         String script = baseLocale.getScript();
   420         String script = baseLocale.getScript();
   421         String region = baseLocale.getRegion();
   421         String region = baseLocale.getRegion();
   422         String variant = baseLocale.getVariant();
   422         String variant = baseLocale.getVariant();
   423 
   423 
       
   424         boolean hasSubtag = false;
       
   425 
   424         String privuseVar = null;   // store ill-formed variant subtags
   426         String privuseVar = null;   // store ill-formed variant subtags
   425 
   427 
   426         if (language.length() == 0 || !isLanguage(language)) {
   428         if (language.length() > 0 && isLanguage(language)) {
   427             tag._language = UNDETERMINED;
       
   428         } else {
       
   429             // Convert a deprecated language code used by Java to
   429             // Convert a deprecated language code used by Java to
   430             // a new code
   430             // a new code
   431             if (language.equals("iw")) {
   431             if (language.equals("iw")) {
   432                 language = "he";
   432                 language = "he";
   433             } else if (language.equals("ji")) {
   433             } else if (language.equals("ji")) {
   438             tag._language = language;
   438             tag._language = language;
   439         }
   439         }
   440 
   440 
   441         if (script.length() > 0 && isScript(script)) {
   441         if (script.length() > 0 && isScript(script)) {
   442             tag._script = canonicalizeScript(script);
   442             tag._script = canonicalizeScript(script);
       
   443             hasSubtag = true;
   443         }
   444         }
   444 
   445 
   445         if (region.length() > 0 && isRegion(region)) {
   446         if (region.length() > 0 && isRegion(region)) {
   446             tag._region = canonicalizeRegion(region);
   447             tag._region = canonicalizeRegion(region);
       
   448             hasSubtag = true;
   447         }
   449         }
   448 
   450 
   449         // Special handling for no_NO_NY - use nn_NO for language tag
   451         // Special handling for no_NO_NY - use nn_NO for language tag
   450         if (tag._language.equals("no") && tag._region.equals("NO") && variant.equals("NY")) {
   452         if (tag._language.equals("no") && tag._region.equals("NO") && variant.equals("NY")) {
   451             tag._language = "nn";
   453             tag._language = "nn";
   466                 variants.add(var);  // Do not canonicalize!
   468                 variants.add(var);  // Do not canonicalize!
   467                 varitr.next();
   469                 varitr.next();
   468             }
   470             }
   469             if (variants != null) {
   471             if (variants != null) {
   470                 tag._variants = variants;
   472                 tag._variants = variants;
       
   473                 hasSubtag = true;
   471             }
   474             }
   472             if (!varitr.isDone()) {
   475             if (!varitr.isDone()) {
   473                 // ill-formed variant subtags
   476                 // ill-formed variant subtags
   474                 StringBuilder buf = new StringBuilder();
   477                 StringBuilder buf = new StringBuilder();
   475                 while (!varitr.isDone()) {
   478                 while (!varitr.isDone()) {
   506             }
   509             }
   507         }
   510         }
   508 
   511 
   509         if (extensions != null) {
   512         if (extensions != null) {
   510             tag._extensions = extensions;
   513             tag._extensions = extensions;
       
   514             hasSubtag = true;
   511         }
   515         }
   512 
   516 
   513         // append ill-formed variant subtags to private use
   517         // append ill-formed variant subtags to private use
   514         if (privuseVar != null) {
   518         if (privuseVar != null) {
   515             if (privateuse == null) {
   519             if (privateuse == null) {
   519             }
   523             }
   520         }
   524         }
   521 
   525 
   522         if (privateuse != null) {
   526         if (privateuse != null) {
   523             tag._privateuse = privateuse;
   527             tag._privateuse = privateuse;
   524         } else if (tag._language.length() == 0) {
   528         }
   525             // use "und" if neither language nor privateuse is available
   529 
       
   530         if (tag._language.length() == 0 && (hasSubtag || privateuse == null)) {
       
   531             // use lang "und" when 1) no language is available AND
       
   532             // 2) any of other subtags other than private use are available or
       
   533             // no private use tag is available
   526             tag._language = UNDETERMINED;
   534             tag._language = UNDETERMINED;
   527         }
   535         }
   528 
   536 
   529         return tag;
   537         return tag;
   530     }
   538     }