@selfage/closest_locale_finder
Version:
Find the closest matching locale.
63 lines (45 loc) • 2.27 kB
Markdown
`npm install @selfage/closest_locale_finder`
Written in TypeScript and compiled to ES6 with inline source map & source. See [@selfage/tsconfig](https://www.npmjs.com/package/@selfage/tsconfig) for full compiler options. Provides helper functions to find the closest locale out of a list of locales you want to support.
Lookup algorithm is based on [lookup-closest-locale](https://github.com/format-message/format-message/blob/v6.2.3/packages/lookup-closest-locale/index.js).
E.g., given a list of supported locales, `['en', 'en-US']`, if you look for `en-GB`, the closest matching locale is `en`.
```TypeScript
type Delimiter = "-" | "_";
function findClosestLocalizedText<T>(targetLocales: Array<string> /* From most preferred to least preferred. */, localizedTexts: Map<string, T>, defaultText: T, delimiter: Delimiter = '-'): T;
```
```TypeScript
import { findClosestLocalizedText } from '@selfage/closest_locale_finder';
let text = findClosestLocalizedText(
[],
new Map([
['en-US', {'welcome': 'Hello'}],
['zh-CN', {'welcome': '欢迎'}]
]),
{'welcome': 'Hello'});
console.log(text.welcome);
```
```TypeScript
type Delimiter = "-" | "_";
function findClosestLocale(targetLocales: Array<string> /* From most preferred to least preferred. */, availableLocales: Set<string>, defaultLocale: string, delimiter: Delimiter = '-'): string;
```
```TypeScript
import { findClosestLocale } from '@selfage/closest_locale_finder';
let locale = findClosestLocale(
[],
new Set(['en-US', 'zh-CN']),
'en-US');
console.log(locale);
```
```TypeScript
type Delimiter = "-" | "_";
function forEachLocaleCandidate<T>(targetLocales: Array<string> /* From most preferred to least preferred. */, tryMatch: (localeCandidate: string) => {
matched: boolean;
res: T;
}, defaultValue: T, delimiter: Delimiter = '-'): T;
```
`forEachLocaleCandidate` is used internally by both `findClosestLocalizedText` and `findClosestLocale`, which match `localeCandidate` from the map and set respectively.