equal
deleted
inserted
replaced
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 } |