.. | ||
index.js | ||
license | ||
package.json | ||
readme.md |
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