/
usr
/
include
/
unicode
/
/usr/include/unicode
mkdir
upload
Name
Size
Mode
Actions
alphaindex.h
27118
0644
edit
dl
rm
appendable.h
8694
0644
edit
dl
rm
basictz.h
9491
0644
edit
dl
rm
brkiter.h
28464
0644
edit
dl
rm
bytestream.h
11037
0644
edit
dl
rm
bytestrie.h
21266
0644
edit
dl
rm
bytestriebuilder.h
7248
0644
edit
dl
rm
calendar.h
108278
0644
edit
dl
rm
caniter.h
7611
0644
edit
dl
rm
casemap.h
25933
0644
edit
dl
rm
char16ptr.h
7393
0644
edit
dl
rm
chariter.h
24632
0644
edit
dl
rm
choicfmt.h
24482
0644
edit
dl
rm
coleitr.h
14094
0644
edit
dl
rm
coll.h
57581
0644
edit
dl
rm
compactdecimalformat.h
7047
0644
edit
dl
rm
curramt.h
3851
0644
edit
dl
rm
currpinf.h
7473
0644
edit
dl
rm
currunit.h
4094
0644
edit
dl
rm
datefmt.h
41641
0644
edit
dl
rm
dbbi.h
1223
0644
edit
dl
rm
dcfmtsym.h
20897
0644
edit
dl
rm
decimfmt.h
89278
0644
edit
dl
rm
docmain.h
7142
0644
edit
dl
rm
dtfmtsym.h
38609
0644
edit
dl
rm
dtintrv.h
3930
0644
edit
dl
rm
dtitvfmt.h
47634
0644
edit
dl
rm
dtitvinf.h
19064
0644
edit
dl
rm
dtptngen.h
26419
0644
edit
dl
rm
dtrule.h
8888
0644
edit
dl
rm
edits.h
21237
0644
edit
dl
rm
enumset.h
2130
0644
edit
dl
rm
errorcode.h
4956
0644
edit
dl
rm
fieldpos.h
8899
0644
edit
dl
rm
filteredbrk.h
5501
0644
edit
dl
rm
fmtable.h
25007
0644
edit
dl
rm
format.h
12802
0644
edit
dl
rm
formattedvalue.h
9987
0644
edit
dl
rm
fpositer.h
3109
0644
edit
dl
rm
gender.h
3408
0644
edit
dl
rm
gregocal.h
32472
0644
edit
dl
rm
icudataver.h
1051
0644
edit
dl
rm
icuplug.h
12166
0644
edit
dl
rm
idna.h
13000
0644
edit
dl
rm
listformatter.h
9493
0644
edit
dl
rm
localebuilder.h
11502
0644
edit
dl
rm
localematcher.h
25147
0644
edit
dl
rm
localpointer.h
19829
0644
edit
dl
rm
locdspnm.h
7292
0644
edit
dl
rm
locid.h
48821
0644
edit
dl
rm
measfmt.h
11603
0644
edit
dl
rm
measunit.h
97563
0644
edit
dl
rm
measure.h
4423
0644
edit
dl
rm
messagepattern.h
34521
0644
edit
dl
rm
msgfmt.h
45168
0644
edit
dl
rm
normalizer2.h
34851
0644
edit
dl
rm
normlzr.h
31682
0644
edit
dl
rm
nounit.h
2754
0644
edit
dl
rm
numberformatter.h
86276
0644
edit
dl
rm
numberrangeformatter.h
28617
0644
edit
dl
rm
numfmt.h
50950
0644
edit
dl
rm
numsys.h
7500
0644
edit
dl
rm
parseerr.h
3155
0644
edit
dl
rm
parsepos.h
5692
0644
edit
dl
rm
platform.h
28751
0644
edit
dl
rm
plurfmt.h
25800
0644
edit
dl
rm
plurrule.h
18780
0644
edit
dl
rm
ptypes.h
3577
0644
edit
dl
rm
putil.h
6487
0644
edit
dl
rm
rbbi.h
27218
0644
edit
dl
rm
rbnf.h
49899
0644
edit
dl
rm
rbtz.h
15979
0644
edit
dl
rm
regex.h
86367
0644
edit
dl
rm
region.h
9404
0644
edit
dl
rm
reldatefmt.h
22801
0644
edit
dl
rm
rep.h
9599
0644
edit
dl
rm
resbund.h
18503
0644
edit
dl
rm
schriter.h
6475
0644
edit
dl
rm
scientificnumberformatter.h
6553
0644
edit
dl
rm
search.h
22757
0644
edit
dl
rm
selfmt.h
14643
0644
edit
dl
rm
simpleformatter.h
12888
0644
edit
dl
rm
simpletz.h
46527
0644
edit
dl
rm
smpdtfmt.h
72713
0644
edit
dl
rm
sortkey.h
11444
0644
edit
dl
rm
std_string.h
1076
0644
edit
dl
rm
strenum.h
10158
0644
edit
dl
rm
stringoptions.h
5926
0644
edit
dl
rm
stringpiece.h
10597
0644
edit
dl
rm
stringtriebuilder.h
15698
0644
edit
dl
rm
stsearch.h
21810
0644
edit
dl
rm
symtable.h
4374
0644
edit
dl
rm
tblcoll.h
37489
0644
edit
dl
rm
timezone.h
42005
0644
edit
dl
rm
tmunit.h
3461
0644
edit
dl
rm
tmutamt.h
5015
0644
edit
dl
rm
tmutfmt.h
8042
0644
edit
dl
rm
translit.h
67400
0644
edit
dl
rm
tzfmt.h
43916
0644
edit
dl
rm
tznames.h
17252
0644
edit
dl
rm
tzrule.h
36215
0644
edit
dl
rm
tztrans.h
6271
0644
edit
dl
rm
ubidi.h
91711
0644
edit
dl
rm
ubiditransform.h
12950
0644
edit
dl
rm
ubrk.h
24547
0644
edit
dl
rm
ucal.h
58265
0644
edit
dl
rm
ucasemap.h
15546
0644
edit
dl
rm
ucat.h
5484
0644
edit
dl
rm
uchar.h
144630
0644
edit
dl
rm
ucharstrie.h
23120
0644
edit
dl
rm
ucharstriebuilder.h
7378
0644
edit
dl
rm
uchriter.h
13521
0644
edit
dl
rm
uclean.h
11474
0644
edit
dl
rm
ucnv.h
85085
0644
edit
dl
rm
ucnvsel.h
6283
0644
edit
dl
rm
ucnv_cb.h
6748
0644
edit
dl
rm
ucnv_err.h
21492
0644
edit
dl
rm
ucol.h
62939
0644
edit
dl
rm
ucoleitr.h
9684
0644
edit
dl
rm
uconfig.h
12356
0644
edit
dl
rm
ucpmap.h
5663
0644
edit
dl
rm
ucptrie.h
23002
0644
edit
dl
rm
ucsdet.h
15018
0644
edit
dl
rm
ucurr.h
16507
0644
edit
dl
rm
udat.h
62851
0644
edit
dl
rm
udata.h
15930
0644
edit
dl
rm
udateintervalformat.h
10995
0644
edit
dl
rm
udatpg.h
27447
0644
edit
dl
rm
udisplaycontext.h
6029
0644
edit
dl
rm
uenum.h
7970
0644
edit
dl
rm
ufieldpositer.h
4461
0644
edit
dl
rm
uformattable.h
11198
0644
edit
dl
rm
uformattedvalue.h
12413
0644
edit
dl
rm
ugender.h
2052
0644
edit
dl
rm
uidna.h
34169
0644
edit
dl
rm
uiter.h
23319
0644
edit
dl
rm
uldnames.h
10702
0644
edit
dl
rm
ulistformatter.h
11086
0644
edit
dl
rm
uloc.h
54432
0644
edit
dl
rm
ulocdata.h
11533
0644
edit
dl
rm
umachine.h
14884
0644
edit
dl
rm
umisc.h
1365
0644
edit
dl
rm
umsg.h
24812
0644
edit
dl
rm
umutablecptrie.h
8435
0644
edit
dl
rm
unifilt.h
4055
0644
edit
dl
rm
unifunct.h
4141
0644
edit
dl
rm
unimatch.h
6244
0644
edit
dl
rm
unirepl.h
3464
0644
edit
dl
rm
uniset.h
66459
0644
edit
dl
rm
unistr.h
174523
0644
edit
dl
rm
unorm.h
21015
0644
edit
dl
rm
unorm2.h
25254
0644
edit
dl
rm
unum.h
54743
0644
edit
dl
rm
unumberformatter.h
25824
0644
edit
dl
rm
unumsys.h
7387
0644
edit
dl
rm
uobject.h
10936
0644
edit
dl
rm
upluralrules.h
8013
0644
edit
dl
rm
uregex.h
73784
0644
edit
dl
rm
uregion.h
10073
0644
edit
dl
rm
ureldatefmt.h
17409
0644
edit
dl
rm
urename.h
134449
0644
edit
dl
rm
urep.h
5507
0644
edit
dl
rm
ures.h
37415
0644
edit
dl
rm
uscript.h
27867
0644
edit
dl
rm
usearch.h
39039
0644
edit
dl
rm
uset.h
40958
0644
edit
dl
rm
usetiter.h
9781
0644
edit
dl
rm
ushape.h
18432
0644
edit
dl
rm
uspoof.h
67480
0644
edit
dl
rm
usprep.h
8331
0644
edit
dl
rm
ustdio.h
39469
0644
edit
dl
rm
ustream.h
1934
0644
edit
dl
rm
ustring.h
74211
0644
edit
dl
rm
ustringtrie.h
3224
0644
edit
dl
rm
utext.h
59527
0644
edit
dl
rm
utf.h
8046
0644
edit
dl
rm
utf8.h
31700
0644
edit
dl
rm
utf16.h
23878
0644
edit
dl
rm
utf32.h
763
0644
edit
dl
rm
utf_old.h
46929
0644
edit
dl
rm
utmscale.h
14113
0644
edit
dl
rm
utrace.h
17706
0644
edit
dl
rm
utrans.h
26130
0644
edit
dl
rm
utypes.h
31481
0644
edit
dl
rm
uvernum.h
6832
0644
edit
dl
rm
uversion.h
6145
0644
edit
dl
rm
vtzone.h
20784
0644
edit
dl
rm
Edit:
/usr/include/unicode/localematcher.h
(25147B)
// © 2019 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html#License // localematcher.h // created: 2019may08 Markus W. Scherer #ifndef __LOCALEMATCHER_H__ #define __LOCALEMATCHER_H__ #include "unicode/utypes.h" #if U_SHOW_CPLUSPLUS_API #include "unicode/locid.h" #include "unicode/stringpiece.h" #include "unicode/uobject.h" /** * \file * \brief C++ API: Locale matcher: User's desired locales vs. application's supported locales. */ #ifndef U_FORCE_HIDE_DRAFT_API /** * Builder option for whether the language subtag or the script subtag is most important. * * @see Builder#setFavorSubtag(ULocMatchFavorSubtag) * @draft ICU 65 */ enum ULocMatchFavorSubtag { /** * Language differences are most important, then script differences, then region differences. * (This is the default behavior.) * * @draft ICU 65 */ ULOCMATCH_FAVOR_LANGUAGE, /** * Makes script differences matter relatively more than language differences. * * @draft ICU 65 */ ULOCMATCH_FAVOR_SCRIPT }; #ifndef U_IN_DOXYGEN typedef enum ULocMatchFavorSubtag ULocMatchFavorSubtag; #endif /** * Builder option for whether all desired locales are treated equally or * earlier ones are preferred. * * @see Builder#setDemotionPerDesiredLocale(ULocMatchDemotion) * @draft ICU 65 */ enum ULocMatchDemotion { /** * All desired locales are treated equally. * * @draft ICU 65 */ ULOCMATCH_DEMOTION_NONE, /** * Earlier desired locales are preferred. * * <p>From each desired locale to the next, * the distance to any supported locale is increased by an additional amount * which is at least as large as most region mismatches. * A later desired locale has to have a better match with some supported locale * due to more than merely having the same region subtag. * * <p>For example: <code>Supported={en, sv} desired=[en-GB, sv]</code> * yields <code>Result(en-GB, en)</code> because * with the demotion of sv its perfect match is no better than * the region distance between the earlier desired locale en-GB and en=en-US. * * <p>Notes: * <ul> * <li>In some cases, language and/or script differences can be as small as * the typical region difference. (Example: sr-Latn vs. sr-Cyrl) * <li>It is possible for certain region differences to be larger than usual, * and larger than the demotion. * (As of CLDR 35 there is no such case, but * this is possible in future versions of the data.) * </ul> * * @draft ICU 65 */ ULOCMATCH_DEMOTION_REGION }; #ifndef U_IN_DOXYGEN typedef enum ULocMatchDemotion ULocMatchDemotion; #endif /** * Builder option for whether to include or ignore one-way (fallback) match data. * The LocaleMatcher uses CLDR languageMatch data which includes fallback (oneway=true) entries. * Sometimes it is desirable to ignore those. * * <p>For example, consider a web application with the UI in a given language, * with a link to another, related web app. * The link should include the UI language, and the target server may also use * the client’s Accept-Language header data. * The target server has its own list of supported languages. * One may want to favor UI language consistency, that is, * if there is a decent match for the original UI language, we want to use it, * but not if it is merely a fallback. * * @see Builder#setDirection(ULocMatchDirection) * @draft ICU 67 */ enum ULocMatchDirection { /** * Locale matching includes one-way matches such as Breton→French. (default) * * @draft ICU 67 */ ULOCMATCH_DIRECTION_WITH_ONE_WAY, /** * Locale matching limited to two-way matches including e.g. Danish↔Norwegian * but ignoring one-way matches. * * @draft ICU 67 */ ULOCMATCH_DIRECTION_ONLY_TWO_WAY }; #ifndef U_IN_DOXYGEN typedef enum ULocMatchDirection ULocMatchDirection; #endif struct UHashtable; U_NAMESPACE_BEGIN struct LSR; class LocaleDistance; class LocaleLsrIterator; class UVector; class XLikelySubtags; /** * Immutable class that picks the best match between a user's desired locales and * an application's supported locales. * Movable but not copyable. * * <p>Example: * <pre> * UErrorCode errorCode = U_ZERO_ERROR; * LocaleMatcher matcher = LocaleMatcher::Builder().setSupportedLocales("fr, en-GB, en").build(errorCode); * Locale *bestSupported = matcher.getBestLocale(Locale.US, errorCode); // "en" * </pre> * * <p>A matcher takes into account when languages are close to one another, * such as Danish and Norwegian, * and when regional variants are close, like en-GB and en-AU as opposed to en-US. * * <p>If there are multiple supported locales with the same (language, script, region) * likely subtags, then the current implementation returns the first of those locales. * It ignores variant subtags (except for pseudolocale variants) and extensions. * This may change in future versions. * * <p>For example, the current implementation does not distinguish between * de, de-DE, de-Latn, de-1901, de-u-co-phonebk. * * <p>If you prefer one equivalent locale over another, then provide only the preferred one, * or place it earlier in the list of supported locales. * * <p>Otherwise, the order of supported locales may have no effect on the best-match results. * The current implementation compares each desired locale with supported locales * in the following order: * 1. Default locale, if supported; * 2. CLDR "paradigm locales" like en-GB and es-419; * 3. other supported locales. * This may change in future versions. * * <p>Often a product will just need one matcher instance, built with the languages * that it supports. However, it may want multiple instances with different * default languages based on additional information, such as the domain. * * <p>This class is not intended for public subclassing. * * @draft ICU 65 */ class U_COMMON_API LocaleMatcher : public UMemory { public: /** * Data for the best-matching pair of a desired and a supported locale. * Movable but not copyable. * * @draft ICU 65 */ class U_COMMON_API Result : public UMemory { public: /** * Move constructor; might modify the source. * This object will have the same contents that the source object had. * * @param src Result to move contents from. * @draft ICU 65 */ Result(Result &&src) U_NOEXCEPT; /** * Destructor. * * @draft ICU 65 */ ~Result(); /** * Move assignment; might modify the source. * This object will have the same contents that the source object had. * * @param src Result to move contents from. * @draft ICU 65 */ Result &operator=(Result &&src) U_NOEXCEPT; #ifndef U_HIDE_DRAFT_API /** * Returns the best-matching desired locale. * nullptr if the list of desired locales is empty or if none matched well enough. * * @return the best-matching desired locale, or nullptr. * @draft ICU 65 */ inline const Locale *getDesiredLocale() const { return desiredLocale; } /** * Returns the best-matching supported locale. * If none matched well enough, this is the default locale. * The default locale is nullptr if the list of supported locales is empty and * no explicit default locale is set. * * @return the best-matching supported locale, or nullptr. * @draft ICU 65 */ inline const Locale *getSupportedLocale() const { return supportedLocale; } /** * Returns the index of the best-matching desired locale in the input Iterable order. * -1 if the list of desired locales is empty or if none matched well enough. * * @return the index of the best-matching desired locale, or -1. * @draft ICU 65 */ inline int32_t getDesiredIndex() const { return desiredIndex; } /** * Returns the index of the best-matching supported locale in the * constructor’s or builder’s input order (“set” Collection plus “added” locales). * If the matcher was built from a locale list string, then the iteration order is that * of a LocalePriorityList built from the same string. * -1 if the list of supported locales is empty or if none matched well enough. * * @return the index of the best-matching supported locale, or -1. * @draft ICU 65 */ inline int32_t getSupportedIndex() const { return supportedIndex; } /** * Takes the best-matching supported locale and adds relevant fields of the * best-matching desired locale, such as the -t- and -u- extensions. * May replace some fields of the supported locale. * The result is the locale that should be used for date and number formatting, collation, etc. * Returns the root locale if getSupportedLocale() returns nullptr. * * <p>Example: desired=ar-SA-u-nu-latn, supported=ar-EG, resolved locale=ar-SA-u-nu-latn * * @return a locale combining the best-matching desired and supported locales. * @draft ICU 65 */ Locale makeResolvedLocale(UErrorCode &errorCode) const; #endif // U_HIDE_DRAFT_API private: Result(const Locale *desired, const Locale *supported, int32_t desIndex, int32_t suppIndex, UBool owned) : desiredLocale(desired), supportedLocale(supported), desiredIndex(desIndex), supportedIndex(suppIndex), desiredIsOwned(owned) {} Result(const Result &other) = delete; Result &operator=(const Result &other) = delete; const Locale *desiredLocale; const Locale *supportedLocale; int32_t desiredIndex; int32_t supportedIndex; UBool desiredIsOwned; friend class LocaleMatcher; }; /** * LocaleMatcher builder. * Movable but not copyable. * * @see LocaleMatcher#builder() * @draft ICU 65 */ class U_COMMON_API Builder : public UMemory { public: /** * Constructs a builder used in chaining parameters for building a LocaleMatcher. * * @return a new Builder object * @draft ICU 65 */ Builder() {} /** * Move constructor; might modify the source. * This builder will have the same contents that the source builder had. * * @param src Builder to move contents from. * @draft ICU 65 */ Builder(Builder &&src) U_NOEXCEPT; /** * Destructor. * * @draft ICU 65 */ ~Builder(); /** * Move assignment; might modify the source. * This builder will have the same contents that the source builder had. * * @param src Builder to move contents from. * @draft ICU 65 */ Builder &operator=(Builder &&src) U_NOEXCEPT; #ifndef U_HIDE_DRAFT_API /** * Parses an Accept-Language string * (<a href="https://tools.ietf.org/html/rfc2616#section-14.4">RFC 2616 Section 14.4</a>), * such as "af, en, fr;q=0.9", and sets the supported locales accordingly. * Allows whitespace in more places but does not allow "*". * Clears any previously set/added supported locales first. * * @param locales the Accept-Language string of locales to set * @return this Builder object * @draft ICU 65 */ Builder &setSupportedLocalesFromListString(StringPiece locales); /** * Copies the supported locales, preserving iteration order. * Clears any previously set/added supported locales first. * Duplicates are allowed, and are not removed. * * @param locales the list of locale * @return this Builder object * @draft ICU 65 */ Builder &setSupportedLocales(Locale::Iterator &locales); /** * Copies the supported locales from the begin/end range, preserving iteration order. * Clears any previously set/added supported locales first. * Duplicates are allowed, and are not removed. * * Each of the iterator parameter values must be an * input iterator whose value is convertible to const Locale &. * * @param begin Start of range. * @param end Exclusive end of range. * @return this Builder object * @draft ICU 65 */ template<typename Iter> Builder &setSupportedLocales(Iter begin, Iter end) { if (U_FAILURE(errorCode_)) { return *this; } clearSupportedLocales(); while (begin != end) { addSupportedLocale(*begin++); } return *this; } /** * Copies the supported locales from the begin/end range, preserving iteration order. * Calls the converter to convert each *begin to a Locale or const Locale &. * Clears any previously set/added supported locales first. * Duplicates are allowed, and are not removed. * * Each of the iterator parameter values must be an * input iterator whose value is convertible to const Locale &. * * @param begin Start of range. * @param end Exclusive end of range. * @param converter Converter from *begin to const Locale & or compatible. * @return this Builder object * @draft ICU 65 */ template<typename Iter, typename Conv> Builder &setSupportedLocalesViaConverter(Iter begin, Iter end, Conv converter) { if (U_FAILURE(errorCode_)) { return *this; } clearSupportedLocales(); while (begin != end) { addSupportedLocale(converter(*begin++)); } return *this; } /** * Adds another supported locale. * Duplicates are allowed, and are not removed. * * @param locale another locale * @return this Builder object * @draft ICU 65 */ Builder &addSupportedLocale(const Locale &locale); /** * Sets the default locale; if nullptr, or if it is not set explicitly, * then the first supported locale is used as the default locale. * * @param defaultLocale the default locale (will be copied) * @return this Builder object * @draft ICU 65 */ Builder &setDefaultLocale(const Locale *defaultLocale); /** * If ULOCMATCH_FAVOR_SCRIPT, then the language differences are smaller than script * differences. * This is used in situations (such as maps) where * it is better to fall back to the same script than a similar language. * * @param subtag the subtag to favor * @return this Builder object * @draft ICU 65 */ Builder &setFavorSubtag(ULocMatchFavorSubtag subtag); /** * Option for whether all desired locales are treated equally or * earlier ones are preferred (this is the default). * * @param demotion the demotion per desired locale to set. * @return this Builder object * @draft ICU 65 */ Builder &setDemotionPerDesiredLocale(ULocMatchDemotion demotion); /** * Option for whether to include or ignore one-way (fallback) match data. * By default, they are included. * * @param direction the match direction to set. * @return this Builder object * @draft ICU 67 */ Builder &setDirection(ULocMatchDirection direction) { if (U_SUCCESS(errorCode_)) { direction_ = direction; } return *this; } /** * Sets the UErrorCode if an error occurred while setting parameters. * Preserves older error codes in the outErrorCode. * * @param outErrorCode Set to an error code if it does not contain one already * and an error occurred while setting parameters. * Otherwise unchanged. * @return TRUE if U_FAILURE(outErrorCode) * @draft ICU 65 */ UBool copyErrorTo(UErrorCode &outErrorCode) const; /** * Builds and returns a new locale matcher. * This builder can continue to be used. * * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return new LocaleMatcher. * @draft ICU 65 */ LocaleMatcher build(UErrorCode &errorCode) const; #endif // U_HIDE_DRAFT_API private: friend class LocaleMatcher; Builder(const Builder &other) = delete; Builder &operator=(const Builder &other) = delete; void clearSupportedLocales(); bool ensureSupportedLocaleVector(); UErrorCode errorCode_ = U_ZERO_ERROR; UVector *supportedLocales_ = nullptr; int32_t thresholdDistance_ = -1; ULocMatchDemotion demotion_ = ULOCMATCH_DEMOTION_REGION; Locale *defaultLocale_ = nullptr; ULocMatchFavorSubtag favor_ = ULOCMATCH_FAVOR_LANGUAGE; ULocMatchDirection direction_ = ULOCMATCH_DIRECTION_WITH_ONE_WAY; }; // FYI No public LocaleMatcher constructors in C++; use the Builder. /** * Move copy constructor; might modify the source. * This matcher will have the same settings that the source matcher had. * @param src source matcher * @draft ICU 65 */ LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT; /** * Destructor. * @draft ICU 65 */ ~LocaleMatcher(); /** * Move assignment operator; might modify the source. * This matcher will have the same settings that the source matcher had. * The behavior is undefined if *this and src are the same object. * @param src source matcher * @return *this * @draft ICU 65 */ LocaleMatcher &operator=(LocaleMatcher &&src) U_NOEXCEPT; #ifndef U_HIDE_DRAFT_API /** * Returns the supported locale which best matches the desired locale. * * @param desiredLocale Typically a user's language. * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching supported locale. * @draft ICU 65 */ const Locale *getBestMatch(const Locale &desiredLocale, UErrorCode &errorCode) const; /** * Returns the supported locale which best matches one of the desired locales. * * @param desiredLocales Typically a user's languages, in order of preference (descending). * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching supported locale. * @draft ICU 65 */ const Locale *getBestMatch(Locale::Iterator &desiredLocales, UErrorCode &errorCode) const; /** * Parses an Accept-Language string * (<a href="https://tools.ietf.org/html/rfc2616#section-14.4">RFC 2616 Section 14.4</a>), * such as "af, en, fr;q=0.9", * and returns the supported locale which best matches one of the desired locales. * Allows whitespace in more places but does not allow "*". * * @param desiredLocaleList Typically a user's languages, as an Accept-Language string. * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching supported locale. * @draft ICU 65 */ const Locale *getBestMatchForListString(StringPiece desiredLocaleList, UErrorCode &errorCode) const; /** * Returns the best match between the desired locale and the supported locales. * If the result's desired locale is not nullptr, then it is the address of the input locale. * It has not been cloned. * * @param desiredLocale Typically a user's language. * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching pair of the desired and a supported locale. * @draft ICU 65 */ Result getBestMatchResult(const Locale &desiredLocale, UErrorCode &errorCode) const; /** * Returns the best match between the desired and supported locales. * If the result's desired locale is not nullptr, then it is a clone of * the best-matching desired locale. The Result object owns the clone. * * @param desiredLocales Typically a user's languages, in order of preference (descending). * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return the best-matching pair of a desired and a supported locale. * @draft ICU 65 */ Result getBestMatchResult(Locale::Iterator &desiredLocales, UErrorCode &errorCode) const; #endif // U_HIDE_DRAFT_API #ifndef U_HIDE_INTERNAL_API /** * Returns a fraction between 0 and 1, where 1 means that the languages are a * perfect match, and 0 means that they are completely different. * * <p>This is mostly an implementation detail, and the precise values may change over time. * The implementation may use either the maximized forms or the others ones, or both. * The implementation may or may not rely on the forms to be consistent with each other. * * <p>Callers should construct and use a matcher rather than match pairs of locales directly. * * @param desired Desired locale. * @param supported Supported locale. * @param errorCode ICU error code. Its input value must pass the U_SUCCESS() test, * or else the function returns immediately. Check for U_FAILURE() * on output or use with function chaining. (See User Guide for details.) * @return value between 0 and 1, inclusive. * @internal (has a known user) */ double internalMatch(const Locale &desired, const Locale &supported, UErrorCode &errorCode) const; #endif // U_HIDE_INTERNAL_API private: LocaleMatcher(const Builder &builder, UErrorCode &errorCode); LocaleMatcher(const LocaleMatcher &other) = delete; LocaleMatcher &operator=(const LocaleMatcher &other) = delete; int32_t putIfAbsent(const LSR &lsr, int32_t i, int32_t suppLength, UErrorCode &errorCode); int32_t getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remainingIter, UErrorCode &errorCode) const; const XLikelySubtags &likelySubtags; const LocaleDistance &localeDistance; int32_t thresholdDistance; int32_t demotionPerDesiredLocale; ULocMatchFavorSubtag favorSubtag; ULocMatchDirection direction; // These are in input order. const Locale ** supportedLocales; LSR *lsrs; int32_t supportedLocalesLength; // These are in preference order: 1. Default locale 2. paradigm locales 3. others. UHashtable *supportedLsrToIndex; // Map<LSR, Integer> stores index+1 because 0 is "not found" // Array versions of the supportedLsrToIndex keys and values. // The distance lookup loops over the supportedLSRs and returns the index of the best match. const LSR **supportedLSRs; int32_t *supportedIndexes; int32_t supportedLSRsLength; Locale *ownedDefaultLocale; const Locale *defaultLocale; }; U_NAMESPACE_END #endif // U_FORCE_HIDE_DRAFT_API #endif // U_SHOW_CPLUSPLUS_API #endif // __LOCALEMATCHER_H__
Save
cmd:
run