Class

LocaleMatcher

LocaleMatcher(options)

Create a new locale matcher instance. This is used to see which locales can be matched with each other in various ways.

The options object may contain any of the following properties:

  • locale - the locale instance or locale spec to match
  • onLoad - a callback function to call when the locale matcher object is fully loaded. When the onLoad option is given, the locale matcher object will attempt to load any missing locale data using the ilib loader callback. When the constructor is done (even if the data is already preassembled), the onLoad function is called with the current instance as a parameter, so this callback can be used with preassembled or dynamic loading or a mix of the two.
  • sync - tell whether to load any missing locale data synchronously or asynchronously. If this option is given as "false", then the "onLoad" callback must be given, as the instance returned from this constructor will not be usable for a while.
  • loadParams - an object containing parameters to pass to the loader callback function when locale data is missing. The parameters are not interpretted or modified in any way. They are simply passed along. The object may contain any property/value pairs as long as the calling code is in agreement with the loader callback function as to what those parameters mean.
Constructor

# new LocaleMatcher(options)

Parameters:
Name Type Description
options Object

parameters to initialize this matcher

View Source LocaleMatcher.js, line 81

Members

Object.<string, string>

# info

View Source LocaleMatcher.js, line 113

Methods

# getLikelyLocale() → {Locale}

Return an Locale instance that is fully specified based on partial information given to the constructor of this locale matcher instance. For example, if the locale spec given to this locale matcher instance is simply "ru" (for the Russian language), then it will fill in the missing region and script tags and return a locale with the specifier "ru-Cyrl-RU". (ie. Russian language, Cyrillic, Russian Federation). Any one or two of the language, script, or region parts may be left unspecified, and the other one or two parts will be filled in automatically. If this class has no information about the given locale, then the locale of this locale matcher instance is returned unchanged.

View Source LocaleMatcher.js, line 185

the most likely completion of the partial locale given to the constructor of this locale matcher instance

Locale

# getLikelyLocaleMinimal() → {Locale}

Return an Locale instance that is specified based on partial information given to the constructor of this locale matcher instance but which leaves out any part of the locale specifier that is so common that it is understood. For example, if the locale spec given to this locale matcher instance is simply "ru" (for the Russian language), then it will fill in the missing region and/or script tags and return a locale with the specifier "ru-RU". (ie. Russian language, Russian Federation). Note that the default script "Cyrl" is left out because the vast majority of text written in Russian is written with the Cyrllic script, so that part of the locale is understood and is commonly left out.

Any one or two of the language, script, or region parts may be left unspecified, and the other one or two parts will be filled in automatically. If this class has no information about the given locale, then the locale of this locale matcher instance is returned unchanged.

This method returns the same information as getLikelyLocale but with the very common parts left out.

View Source LocaleMatcher.js, line 213

the most likely "minimal" completion of the partial locale given to the constructor of this locale matcher instance where the commonly understood parts are left out.

Locale

# getLocale() → {Locale|undefined}

Return the locale used to construct this instance.

View Source LocaleMatcher.js, line 133

the locale for this matcher

Locale | undefined

# getMacroLanguage() → {string}

Return the macrolanguage associated with this locale. If the locale's language is not part of a macro-language, then the locale's language is returned as-is.

View Source LocaleMatcher.js, line 383

the ISO code for the macrolanguage associated with this locale, or language of the locale

string

# getRegionContainment() → {Array.<string>}

Return the list of regions that this locale is contained within. Regions are nested, so locales can be in multiple regions. (eg. US is in Northern North America, North America, the Americas, the World.) Most regions are specified using UN.49 region numbers, though some, like "EU", are letters. If the locale is underspecified, this method will use the most likely locale method to get the region first. For example, the locale "ja" (Japanese) is most likely "ja-JP" (Japanese for Japan), and the region containment info for Japan is returned.

View Source LocaleMatcher.js, line 407

an array of region specifiers that this locale is within

Array.<string>

# match(locale) → {number}

Return the degree that the given locale matches the current locale of this matcher. This method returns an integer from 0 to 100. A value of 100 is a 100% match, meaning that the two locales are exactly equivalent to each other. (eg. "ja-JP" and "ja-JP") A value of 0 means that there 0% match or that the two locales have nothing in common. (eg. "en-US" and "ja-JP")

Locale matching is not the same as equivalence, as the degree of matching is returned. (See Locale.equals for equivalence.)

The match score is calculated based on matching the 4 locale components, weighted by importance:

  • language - this accounts for 50% of the match score
  • region - accounts for 25% of the match score
  • script - accounts for 20% of the match score
  • variant - accounts for 5% of the match score

The score is affected by the following things:

  • A large language score is given when the language components of the locales match exactly.
  • Higher language scores are given when the languages are linguistically close to each other, such as dialects.
  • A small score is given when two languages are in the same linguistic family, but one is not a dialect of the other, such as German and Dutch.
  • A large region score is given when two locales share the same region.
  • A smaller region score is given when one region is contained within another. For example, Hong Kong is part of China, so a moderate score is given instead of a full score.
  • A small score is given if two regions are geographically close to each other or are tied by history. For example, Ireland and Great Britain are both adjacent and tied by history, so they receive a moderate score.
  • A high script score is given if the two locales share the same script. The legibility of a common script means that there is some small kinship of the different languages.
  • A high variant score is given if the two locales share the same variant. Full score is given when both locales have no variant at all.
  • Locale components that are unspecified in both locales are given high scores.
  • Locales where a particular locale component is missing in only one locale can still match when the default for that locale component matches the component in the other locale. The default value for the missing component is determined using the likely locales data. (See getLikelyLocale()) For example, "en-US" and "en-Latn-US" receive a high script score because the default script for "en" is "Latn".

The intention of this method is that it can be used to determine compatibility of locales. For example, when a user signs up for an account on a web site, the locales that the web site supports and the locale of the user's browser may differ, and the site needs to pick the best locale to show the user. Let's say the web site supports a selection of European languages such as "it-IT", "fr-FR", "de-DE", and "en-GB". The user's browser may be set to "it-CH". The web site code can then match "it-CH" against each of the supported locales to find the one with the highest score. In this case, the best match would be "it-IT" because it shares a language and script in common with "it-CH" and differs only in the region component. It is not a 100% match, but it is pretty good. The web site may decide if the match scores all fall below a chosen threshold (perhaps 50%?), it should show the user the default language "en-GB", because that is probably a better choice than any other supported locale.

Parameters:
Name Type Description
locale Locale

the other locale to match against the current one

View Source LocaleMatcher.js, line 295

an integer from 0 to 100 that indicates the degree to which these locales match each other

number

# smallestCommonRegion(otherLocale) → {string}

Find the smallest region that contains both the current locale and the other locale. If the current or other locales are underspecified, this method will use the most likely locale method to get their regions first. For example, the locale "ja" (Japanese) is most likely "ja-JP" (Japanese for Japan), and the region containment info for Japan is checked against the other locale's region containment info.

Parameters:
Name Type Description
otherLocale string | Locale

a locale specifier or a Locale instance to compare against

View Source LocaleMatcher.js, line 425

the region specifier of the smallest region containing both the current locale and other locale

string