You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-dev@jakarta.apache.org by pi...@apache.org on 2003/10/21 02:23:10 UTC

cvs commit: jakarta-taglibs/standard/src/org/apache/taglibs/standard/tag/common/fmt SetLocaleSupport.java

pierred     2003/10/20 17:23:10

  Modified:    standard/src/org/apache/taglibs/standard/tag/common/fmt
                        SetLocaleSupport.java
  Log:
  Fixed findFormattingMatch() to properly handle a preferred locale
  that specifies a variant. With the old code, 'fr_FR_EUR' would
  be matched with 'fr' and not 'fr_FR'.  A Euro currency would therefore
  not be displayed properly. This fix takes care of that.
  
  Revision  Changes    Path
  1.14      +30 -20    jakarta-taglibs/standard/src/org/apache/taglibs/standard/tag/common/fmt/SetLocaleSupport.java
  
  Index: SetLocaleSupport.java
  ===================================================================
  RCS file: /home/cvs/jakarta-taglibs/standard/src/org/apache/taglibs/standard/tag/common/fmt/SetLocaleSupport.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SetLocaleSupport.java	15 Jul 2003 23:37:16 -0000	1.13
  +++ SetLocaleSupport.java	21 Oct 2003 00:23:10 -0000	1.14
  @@ -455,9 +455,12 @@
        *
        * The best match is given as the first available locale that exactly
        * matches the given preferred locale ("exact match"). If no exact match
  -     * exists, the best match is given as the first available locale that 
  -     * matches the preferred locale's language component and does not have any
  -     * country component ("language match").
  +     * exists, the best match is given to an available locale that meets
  +     * the following criteria (in order of priority):
  +     *  - available locale's variant is empty and exact match for both
  +     *    language and country
  +     *  - available locale's variant and country are empty, and exact match 
  +     *    for language.
        *
        * @param pref the preferred locale
        * @param avail the available formatting locales
  @@ -467,23 +470,30 @@
        */
       private static Locale findFormattingMatch(Locale pref, Locale[] avail) {
   	Locale match = null;
  -
  -	for (int i=0; i<avail.length; i++) {
  -	    if (pref.equals(avail[i])) {
  -		// Exact match
  -		match = avail[i];
  -		break;
  -	    } else {
  -		if (pref.getLanguage().equals(avail[i].getLanguage())
  -		        && ("".equals(avail[i].getCountry()))) {
  -		    // Language match
  -		    if (match == null) {
  -			match = avail[i];
  -		    }
  -		}
  -	    }
  -	}
  -
  +        boolean langAndCountryMatch = false;
  +        for (int i=0; i<avail.length; i++) {
  +            if (pref.equals(avail[i])) {
  +                // Exact match
  +                match = avail[i];
  +                break;
  +            } else if (
  +                    !"".equals(pref.getVariant()) &&
  +                    "".equals(avail[i].getVariant()) &&
  +                    pref.getLanguage().equals(avail[i].getLanguage()) &&
  +                    pref.getCountry().equals(avail[i].getCountry())) {
  +                // Language and country match; different variant
  +                match = avail[i];
  +                langAndCountryMatch = true;
  +            } else if (
  +                    !langAndCountryMatch &&
  +                    pref.getLanguage().equals(avail[i].getLanguage()) &&
  +                    ("".equals(avail[i].getCountry()))) {
  +                // Language match
  +                if (match == null) {
  +                    match = avail[i];
  +                }
  +            }
  +        }
   	return match;
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-dev-help@jakarta.apache.org