Package Exports
- bcp-47-match
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (bcp-47-match) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
bcp-47-match
Match BCP 47 language tags with “language ranges” per RFC 4647,
as done by the :lang()
pseudo-class in CSS, or the Accept-Language
HTTP
header.
Related to bcp-47
.
Contents
Install
npm:
npm install bcp-47-match
Use
var match = require('bcp-47-match')
var basic = match.basicFilter
var extended = match.extendedFilter
var lookup = match.lookup
var tags = ['en-GB', 'de-CH', 'en', 'de']
console.log(basic(tags, '*')) // => [ 'en-GB', 'de-CH', 'en', 'de' ]
console.log(basic(tags, 'en')) // => [ 'en-GB', 'en' ]
console.log(basic(tags, 'en-GB')) // => [ 'en-GB' ]
console.log(basic(tags, ['en-GB', 'en'])) // => [ 'en-GB', 'en' ]
console.log(basic(tags, 'jp')) // => []
console.log(extended(tags, '*')) // => [ 'en-GB', 'de-CH', 'en', 'de' ]
console.log(extended(tags, 'en')) // => [ 'en-GB', 'en' ]
console.log(extended(tags, 'en-GB')) // => [ 'en-GB' ]
console.log(extended(tags, '*-GB')) // => [ 'en-GB' ]
console.log(extended(tags, ['en-GB', 'en'])) // => [ 'en-GB', 'en' ]
console.log(extended(tags, 'jp')) // => []
console.log(lookup(tags, 'en')) // => 'en'
console.log(lookup(tags, 'en-GB')) // => 'en-GB'
console.log(lookup(tags, ['en-GB', 'en'])) // => 'en-GB'
console.log(lookup(tags, ['en', 'en-GB'])) // => 'en'
console.log(lookup(tags, 'jp')) // => undefined
API
match.basicFilter(tags[, ranges])
Match language tags to a list of simple ranges. Searches for matches between the first range and all tags, and continues with further ranges. Returns a list of matching tags in the order they matched.
View matching table
Basic Filter | * | de | de-CH | de-DE | de-*-DE | *-CH |
---|---|---|---|---|---|---|
de | ✔︎ | ✔︎ | ||||
de-CH | ✔︎ | ✔︎ | ✔︎ | |||
de-CH-1996 | ✔︎ | ✔︎ | ✔︎ | |||
de-DE | ✔︎ | ✔︎ | ✔︎ | |||
de-DE-1996 | ✔︎ | ✔︎ | ✔︎ | |||
de-DE-x-goethe | ✔︎ | ✔︎ | ✔︎ | |||
de-Deva | ✔︎ | ✔︎ | ||||
de-Deva-DE | ✔︎ | ✔︎ | ||||
de-Latf-DE | ✔︎ | ✔︎ | ||||
de-Latn-DE | ✔︎ | ✔︎ | ||||
de-Latn-DE-1996 | ✔︎ | ✔︎ | ||||
de-x-DE | ✔︎ | ✔︎ | ||||
en | ✔︎ | |||||
en-GB | ✔︎ | |||||
zh | ✔︎ | |||||
zh-Hans | ✔︎ | |||||
zh-Hant | ✔︎ |
Parameters
tags
(string
orArray.<string>
) — List of BCP-47 tagsranges
(string
orArray.<string>
) — List of RFC 4647 basic ranges (aka, matching/^(\*|[a-z]{1,8}(-[a-z0-9]{1,8})*)$/i
)
Returns
Array.<string>
— Possibly empty list of matching tags in the order they
matched.
match.extendedFilter(tags[, ranges])
Match language tags to a list of extended ranges. Searches for matches between the first range and all tags, and continues with further ranges.
View matching table
Extended Filter | * | de | de-CH | de-DE | de-*-DE | *-CH |
---|---|---|---|---|---|---|
de | ✔︎ | ✔︎ | ||||
de-CH | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-CH-1996 | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-DE | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-DE-1996 | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-DE-x-goethe | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-Deva | ✔︎ | ✔︎ | ||||
de-Deva-DE | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-Latf-DE | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-Latn-DE | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-Latn-DE-1996 | ✔︎ | ✔︎ | ✔︎ | ✔︎ | ||
de-x-DE | ✔︎ | ✔︎ | ||||
en | ✔︎ | |||||
en-GB | ✔︎ | |||||
zh | ✔︎ | |||||
zh-Hans | ✔︎ | |||||
zh-Hant | ✔︎ |
Parameters
tags
(string
orArray.<string>
) — List of BCP-47 tagsranges
(string
orArray.<string>
) — List of RFC 4647 extended ranges (aka, matching/^(\*|[a-z]{1,8})(-(\*|[a-z0-9]{1,8}))*$/i
)
Returns
Array.<string>
— Possibly empty list of matching tags in the order they
matched.
match.lookup(tags, ranges)
Find the best language tag that matches a list of ranges. Searches for a match between the first range and all tags, and continues with further ranges. Returns the first match, if any.
View matching table
Lookup | * | de | de-CH | de-DE | de-*-DE | *-CH |
---|---|---|---|---|---|---|
de | ✔︎︎ | ✔︎︎ | ✔︎ | ✔︎ | ✔︎ | |
de-CH | ✔︎ | ✔︎ | ||||
de-CH-1996 | ✔︎ | |||||
de-DE | ✔︎ | ✔︎ | ||||
de-DE-1996 | ✔︎ | |||||
de-DE-x-goethe | ✔︎ | |||||
de-Deva | ✔︎ | |||||
de-Deva-DE | ✔︎ | |||||
de-Latf-DE | ✔︎ | |||||
de-Latn-DE | ✔︎ | |||||
de-Latn-DE-1996 | ✔︎ | |||||
de-x-DE | ✔︎ | |||||
en | ✔︎ | |||||
en-GB | ✔︎ | |||||
zh | ✔︎ | |||||
zh-Hans | ✔︎ | |||||
zh-Hant | ✔︎ |
Parameters
tags
(string
orArray.<string>
) — List of BCP-47 tagsranges
(string
orArray.<string>
) — List of RFC 4647 basic ranges (but*
is ignored)
Returns
string?
— The first matching tag in tags
, or undefined
otherwise.
Related
bcp-47
— Parse and serialize BCP 47 language tagsbcp-47-normalize
— Normalize, canonicalize, and format BCP 47 tagsiso-3166
— ISO 3166 codesiso-639-2
— ISO 639-2 codesiso-639-3
— ISO 639-3 codesiso-15924
— ISO 15924 codesun-m49
— UN M49 codes