Locales and stringi

Share:

Description

In this section we explain how we deal with locales in stringi. Locale is a fundamental concept in ICU. It identifies a specific user community, i.e. a group of users who have similar culture and language expectations for human-computer interaction.

Details

Because a locale is just an identifier for a region, no validity check is performed when you specify a Locale. ICU is implemented as a set of services. If you want to see whether particular resources are available for the locale you asked for, you must query those resources. Note: When you ask for a resource for a particular locale, you get back the best available match, not necessarily precisely what you requested.

Locale Identifiers

ICU services are parametrized by locale, to deliver culturally correct results. Locales are identified by character strings of the form Language code, Language_Country code, or Language_Country_Variant code, e.g. "en_US".

The two-letter Language code uses the ISO-639-1 standard, e.g. "en" stands for English, "pl" – Polish, "fr" – French, and "de" for German.

Country is a two-letter code following the ISO-3166 standard. This is to reflect different language conventions within the same language, for example in US-English ("en_US") and Australian-English ("en_AU").

Differences may also appear in language conventions used within the same country. For example, the Euro currency may be used in several European countries while the individual country's currency is still in circulation. In such case, ICU Variant "_EURO" could be used for selecting locales that support the Euro currency.

For a list of locales that are recognized by ICU, call stri_locale_list.

A Note on Default Locales

Each locale-sensitive function in stringi selects the current default locale if an empty string or NULL is given as as its locale argument. Default locales are available to all the functions: they are initially set to be the system locale on that platform, and may be changed with stri_locale_set, for example if automatic detection fails to recognize your locale properly.

Sometimes it is suggested that your program should avoid changing the default locale: it is not a good way to request an international object, especially only for a single function call.. All locale-sensitive functions may request any desired locale per-call (by specifying the locale argument), i.e. without referencing to the default locale. During many tests, however, we did not observe any improper behavior of stringi while using a modified default locale.

Locale-Sensitive Functions in stringi

One of many examples of locale-dependent services is the Collator, which performs a locale-aware string comparison. It is used for string comparing, ordering, sorting, and searching. See stri_opts_collator for the description on how to tune its settings, and its locale argument in particular.

Other locale-sensitive functions include e.g. stri_trans_tolower (that does character case mapping).

References

Locale – ICU User Guide, http://userguide.icu-project.org/locale

ISO 639: Language Codes, http://www.iso.org/iso/home/standards/language_codes.htm

ISO 3166: Country Codes, http://www.iso.org/iso/country_codes

See Also

Other locale_management: stri_locale_get, stri_locale_set; stri_locale_info; stri_locale_list

Other locale_sensitive: stri_cmp, stri_compare; stri_count_fixed; stri_detect_fixed; stri_enc_detect2; stri_locate_all_fixed, stri_locate_all_fixed,, stri_locate_first_fixed, stri_locate_first_fixed,, stri_locate_last_fixed, stri_locate_last_fixed; stri_opts_collator; stri_order, stri_sort; stri_replace_all_fixed, stri_replace_all_fixed, stri_replace_first_fixed, stri_replace_first_fixed, stri_replace_last_fixed, stri_replace_last_fixed; stri_split_fixed, stri_split_fixed; stri_trans_tolower, stri_trans_totitle, stri_trans_toupper; stringi-search-fixed

Other stringi_general_topics: stringi-arguments; stringi-encoding; stringi-package; stringi-search-charclass; stringi-search-fixed; stringi-search-regex; stringi-search

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.