ally-bcp-47

A comprehensive TypeScript library for validating, parsing, and working with BCP-47 language tags according to RFC 5646.
Links
Features
- Complete BCP-47 syntax validation - Validates against the full ABNF grammar
- Detailed parsing - Breaks down language tags into their component subtags
- Helpful error messages - Clear, actionable error reporting
- No dependencies - Lightweight and focused
- TypeScript-first - Full type definitions included
Installation
npm install @aleksejdix/ally-bcp47
Usage
Basic Validation
import { isValid, isWellFormed } from "@aleksejdix/ally-bcp47";
// Check if a tag is well-formed (syntax only)
isWellFormed("en-US"); // true
isWellFormed("en--US"); // false
// Check if a tag is valid (syntax + registry validation)
isValid("en-US"); // true
isValid("xy-ZZ"); // false (invalid subtags)
Detailed Validation
import { validateLanguageTag } from "@aleksejdix/ally-bcp47";
const result = validateLanguageTag("en-US");
console.log(result);
/* Output:
{
isWellFormed: true,
isValid: true,
tag: {
tag: "en-us",
language: "en",
region: "us"
}
}
*/
const invalidResult = validateLanguageTag("en-a");
console.log(invalidResult);
/* Output:
{
isWellFormed: false,
isValid: false,
errors: [{
type: "invalid_extension",
message: "Extension singleton a must be followed by at least one extension subtag",
subtag: "a",
subtagType: "extension",
position: 3
}]
}
*/
Parsing Tags
import { parseTag } from "@aleksejdix/ally-bcp47";
const tag = parseTag("zh-Hans-CN-x-private");
console.log(tag);
/* Output:
{
tag: "zh-hans-cn-x-private",
language: "zh",
script: "hans",
region: "cn",
privateuse: ["private"]
}
*/
Validation Options
The validateLanguageTag
function accepts options to customize the validation:
import { validateLanguageTag } from "@aleksejdix/ally-bcp47";
validateLanguageTag("en-US", {
checkRegistry: true, // Whether to validate against the registry (default: true)
warnOnDeprecated: true, // Whether to return warnings for deprecated subtags (default: true)
warnOnRedundantScript: true, // Whether to warn about redundant scripts (default: true)
});
Tag Components
The library breaks down language tags into their component parts:
language
- Primary language subtag (e.g., 'en', 'fr')
extlang
- Extended language subtags (e.g., 'cmn')
script
- Script subtag (e.g., 'Latn', 'Cyrl')
region
- Region subtag (e.g., 'US', '001')
variants
- Variant subtags (e.g., '1996')
extensions
- Extension subtags (e.g., 'u-ca-gregory')
privateuse
- Private use subtags (e.g., 'x-private')
Roadmap
European Accessibility Act Compliance
This library includes comprehensive testing for all European language tags to support compliance with the European Accessibility Act (Directive (EU) 2019/882).
Features for EAA Compliance
- Validation of all 24 official EU language tags
- Support for regional and minority language tags
- Validation of accessibility-related extensions (number formatting, calendar systems, etc.)
- Specific handling of common errors like country codes used as language codes (e.g., ch-DE)
Running European-specific Tests
# Test all European language tags
npm run test:european
# Test accessibility extensions
npm run test:accessibility
# Run the ch-DE specific test cases
npm run test:ch-de
# Demo of European language tag validation
npm run demo:european
For more details, see the European Accessibility Act Compliance Documentation.
Americans with Disabilities Act (ADA) Compliance
This library includes comprehensive testing for US language tags to support compliance with the Americans with Disabilities Act (ADA) requirements for web accessibility.
Features for ADA Compliance
- Validation of US English and other common US language tags
- Support for languages commonly spoken in the US
- Validation of accessibility-related extensions (time formats, number systems, measurement units)
- Private use extensions for screen readers and assistive technologies
- Case normalization according to BCP-47 standards
Running ADA-specific Tests
# Test all ADA-related language tags
npm run test:ada
# Demo of ADA-related language tag validation
npm run demo:ada
For more details, see the Americans with Disabilities Act Compliance Documentation.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT