com.ibm.icu.util
Class LocalePriorityList

java.lang.Object
  extended by com.ibm.icu.util.LocalePriorityList
All Implemented Interfaces:
Iterable<ULocale>

public class LocalePriorityList
extends Object
implements Iterable<ULocale>

Provides an immutable list of languages (locales) in priority order. The string format is based on the Accept-Language format "http://www.ietf.org/rfc/rfc2616.txt", such as "af, en, fr;q=0.9". Syntactically it is slightly more lenient, in allowing extra whitespace between elements, extra commas, and more than 3 decimals (on input), and pins between 0 and 1.

In theory, Accept-Language indicates the relative 'quality' of each item, but in practice, all of the browsers just take an ordered list, like "en, fr, de", and synthesize arbitrary quality values that put these in the right order, like: "en, fr;q=0.7, de;q=0.3". The quality values in these de facto semantics thus have nothing to do with the relative qualities of the original. Accept-Language also doesn't specify the interpretation of multiple instances, eg what "en, fr, en;q=.5" means.

There are various ways to build a LanguagePriorityList, such as using the following equivalent patterns:

 list = LanguagePriorityList.add("af, en, fr;q=0.9").build();
 
 list2 = LanguagePriorityList
  .add(ULocale.forString("af"))
  .add(ULocale.ENGLISH)
  .add(ULocale.FRENCH, 0.9d)
  .build();
 
When the list is built, the internal values are sorted in descending order by weight, and then by input order. That is, if two languages have the same weight, the first one in the original order comes first. If exactly the same language tag appears multiple times, the last one wins. There are two options when building. If preserveWeights are on, then "de;q=0.3, ja;q=0.3, en, fr;q=0.7, de " would result in the following:
 en;q=1.0
 de;q=1.0
 fr;q=0.7
 ja;q=0.3
If it is off (the default), then all weights are reset to 1.0 after reordering. This is to match the effect of the Accept-Language semantics as used in browsers, and results in the following: *
 en;q=1.0
 de;q=1.0
 fr;q=1.0
 ja;q=1.0

Author:
[email protected]
Status:
Stable ICU 4.4.

Nested Class Summary
static class LocalePriorityList.Builder
          Class used for building LanguagePriorityLists
 
Method Summary
static LocalePriorityList.Builder add(LocalePriorityList languagePriorityList)
          Add a language priority list.
static LocalePriorityList.Builder add(String acceptLanguageString)
          Add language codes to the list being built, using a string in rfc2616 (lenient) format, where each language is a valid ULocale.
static LocalePriorityList.Builder add(ULocale languageCode)
          Add a language code to the list being built, with weight 1.0.
static LocalePriorityList.Builder add(ULocale languageCode, double weight)
          Add a language code to the list being built, with specified weight.
 boolean equals(Object o)
          
 Double getWeight(ULocale language)
          Return the weight for a given language, or null if there is none.
 int hashCode()
          
 Iterator<ULocale> iterator()
          
 String toString()
          
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

add

public static LocalePriorityList.Builder add(ULocale languageCode)
Add a language code to the list being built, with weight 1.0.

Parameters:
languageCode - locale/language to be added
Returns:
internal builder, for chaining
Status:
Stable ICU 4.4.

add

public static LocalePriorityList.Builder add(ULocale languageCode,
                                             double weight)
Add a language code to the list being built, with specified weight.

Parameters:
languageCode - locale/language to be added
weight - value from 0.0 to 1.0
Returns:
internal builder, for chaining
Status:
Stable ICU 4.4.

add

public static LocalePriorityList.Builder add(LocalePriorityList languagePriorityList)
Add a language priority list.

Parameters:
languagePriorityList - list to add all the members of
Returns:
internal builder, for chaining
Status:
Stable ICU 4.4.

add

public static LocalePriorityList.Builder add(String acceptLanguageString)
Add language codes to the list being built, using a string in rfc2616 (lenient) format, where each language is a valid ULocale.

Parameters:
acceptLanguageString - String in rfc2616 format (but leniently parsed)
Returns:
internal builder, for chaining
Status:
Stable ICU 4.4.

getWeight

public Double getWeight(ULocale language)
Return the weight for a given language, or null if there is none. Note that the weights may be adjusted from those used to build the list.

Parameters:
language - to get weight of
Returns:
weight
Status:
Stable ICU 4.4.

toString

public String toString()

Overrides:
toString in class Object
Status:
Stable ICU 4.4.

iterator

public Iterator<ULocale> iterator()

Specified by:
iterator in interface Iterable<ULocale>
Status:
Stable ICU 4.4.

equals

public boolean equals(Object o)

Overrides:
equals in class Object
Status:
Stable ICU 4.4.

hashCode

public int hashCode()

Overrides:
hashCode in class Object
Status:
Stable ICU 4.4.


Copyright (c) 2011 IBM Corporation and others.