Package com.ibm.icu.util
Class LocalePriorityList
- java.lang.Object
-
- com.ibm.icu.util.LocalePriorityList
-
- All Implemented Interfaces:
java.lang.Iterable<ULocale>
public class LocalePriorityList extends java.lang.Object implements java.lang.Iterable<ULocale>
Provides an immutable list of languages/locales in priority order. The string format is based on the Accept-Language format (RFC 2616 Section 14.4), 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). The qvalues must be 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 LocalePriorityList, such as using the following equivalent patterns:
list = LocalePriorityList.add("af, en, fr;q=0.9").build(); list2 = LocalePriorityList .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/locales 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:
- markdavis@google.com
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
LocalePriorityList.Builder
Class used for building LocalePriorityLists.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static LocalePriorityList.Builder
add(LocalePriorityList list)
Creates a Builder and adds locales with weights.static LocalePriorityList.Builder
add(ULocale... locales)
Creates a Builder and adds locales, each with weight 1.0.static LocalePriorityList.Builder
add(ULocale locale, double weight)
Creates a Builder and adds a locale with a specified weight.static LocalePriorityList.Builder
add(java.lang.String acceptLanguageString)
Creates a Builder, parses the RFC 2616 string, and adds locales with weights accordingly.boolean
equals(java.lang.Object o)
java.util.Set<ULocale>
getULocales()
Returns the locales as an immutable Set view.java.lang.Double
getWeight(ULocale locale)
Returns the weight for a given language/locale, or null if there is none.int
hashCode()
java.util.Iterator<ULocale>
iterator()
java.lang.String
toString()
-
-
-
Method Detail
-
add
public static LocalePriorityList.Builder add(ULocale... locales)
Creates a Builder and adds locales, each with weight 1.0.- Parameters:
locales
- locales/languages to be added- Returns:
- a new builder with these locales, for chaining
-
add
public static LocalePriorityList.Builder add(ULocale locale, double weight)
Creates a Builder and adds a locale with a specified weight. A zero or negative weight leads to removing the locale. A weight greater than 1 is pinned to 1.- Parameters:
locale
- locale/language to be addedweight
- value from 0.0 to 1.0- Returns:
- a new builder with this locale, for chaining
-
add
public static LocalePriorityList.Builder add(LocalePriorityList list)
Creates a Builder and adds locales with weights.- Parameters:
list
- list of locales with weights- Returns:
- a new builder with these locales, for chaining
-
add
public static LocalePriorityList.Builder add(java.lang.String acceptLanguageString)
Creates a Builder, parses the RFC 2616 string, and adds locales with weights accordingly.- Parameters:
acceptLanguageString
- String in RFC 2616 format (leniently parsed)- Returns:
- a new builder with these locales, for chaining
-
getWeight
public java.lang.Double getWeight(ULocale locale)
Returns the weight for a given language/locale, or null if there is none. Note that the weights may be adjusted from those used to build the list.- Parameters:
locale
- to get weight of- Returns:
- weight
-
getULocales
public java.util.Set<ULocale> getULocales()
Returns the locales as an immutable Set view. The set has the same iteration order as this object itself.- Returns:
- the locales
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
iterator
public java.util.Iterator<ULocale> iterator()
- Specified by:
iterator
in interfacejava.lang.Iterable<ULocale>
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
-