UNPKG

bcp47-helper

Version:

A lightweight TypeScript library for parsing, validating, and managing BCP 47 language tags in Node.js and browser environments.

530 lines (523 loc) 12.2 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.BCP47Helper = {})); })(this, (function (exports) { 'use strict'; var languageData = { "af-ZA": { code: "af-ZA", fullName: "Afrikaans South Africa", language: "Afrikaans", region: "South Africa", description: "South African Afrikaans" }, "am-ET": { code: "am-ET", fullName: "Amharic Ethiopia", language: "Amharic", region: "Ethiopia", description: "Ethiopian Amharic" }, "ar-XA": { code: "ar-XA", fullName: "Arabic Standard", language: "Arabic", region: "Standard", description: "Modern Standard Arabic" }, "bg-BG": { code: "bg-BG", fullName: "Bulgarian Bulgaria", language: "Bulgarian", region: "Bulgaria", description: "Bulgarian" }, "bn-BD": { code: "bn-BD", fullName: "Bengal Bangladesh", language: "Bengali", region: "Bangladesh", description: "Bangladeshi Bengali" }, "bn-IN": { code: "bn-IN", fullName: "Bengal India", language: "Bengali", region: "India", description: "Indian Bengali" }, "ca-ES": { code: "ca-ES", fullName: "Catalan Spain", language: "Catalan", region: "Spain", description: "Catalan" }, "cmn-CN": { code: "cmn-CN", fullName: "Chinese Mainland", language: "Chinese", region: "China", description: "Mandarin Chinese (Simplified)" }, "cmn-TW": { code: "cmn-TW", fullName: "Chinese Taiwan", language: "Chinese", region: "Taiwan", description: "Mandarin Chinese (Traditional)" }, "cs-CZ": { code: "cs-CZ", fullName: "Czech Czechia", language: "Czech", region: "Czechia", description: "Czech" }, "da-DK": { code: "da-DK", fullName: "Danish Denmark", language: "Danish", region: "Denmark", description: "Danish" }, "de-DE": { code: "de-DE", fullName: "German Germany", language: "German", region: "Germany", description: "Standard German" }, "el-GR": { code: "el-GR", fullName: "Greek Greece", language: "Greek", region: "Greece", description: "Modern Greek" }, "en-AU": { code: "en-AU", fullName: "English Australia", language: "English", region: "Australia", description: "Australian English" }, "en-GB": { code: "en-GB", fullName: "English GB", language: "English", region: "United Kingdom", description: "British English" }, "en-IN": { code: "en-IN", fullName: "English India", language: "English", region: "India", description: "Indian English" }, "en-US": { code: "en-US", fullName: "English US", language: "English", region: "United States", description: "US English" }, "es-ES": { code: "es-ES", fullName: "Spanish Spain", language: "Spanish", region: "Spain", description: "European Spanish" }, "es-US": { code: "es-US", fullName: "Spanish US", language: "Spanish", region: "United States", description: "US Spanish" }, "eu-ES": { code: "eu-ES", fullName: "Basque Spain", language: "Basque", region: "Spain", description: "Basque" }, "fi-FI": { code: "fi-FI", fullName: "Finnish Finland", language: "Finnish", region: "Finland", description: "Finnish" }, "fil-PH": { code: "fil-PH", fullName: "Filipino Philippines", language: "Filipino", region: "Philippines", description: "Filipino" }, "fr-CA": { code: "fr-CA", fullName: "French Canada", language: "French", region: "Canada", description: "Canadian French" }, "fr-FR": { code: "fr-FR", fullName: "French France", language: "French", region: "France", description: "European French" }, "gl-ES": { code: "gl-ES", fullName: "Galician Spain", language: "Galician", region: "Spain", description: "Galician" }, "gu-IN": { code: "gu-IN", fullName: "Gujarati India", language: "Gujarati", region: "India", description: "Gujarati" }, "hi-IN": { code: "hi-IN", fullName: "Hindi India", language: "Hindi", region: "India", description: "Indian Hindi" }, "hu-HU": { code: "hu-HU", fullName: "Hungarian Hungary", language: "Hungarian", region: "Hungary", description: "Hungarian" }, "id-ID": { code: "id-ID", fullName: "Indonesian Indonesia", language: "Indonesian", region: "Indonesia", description: "Indonesian" }, "is-IS": { code: "is-IS", fullName: "Icelandic Iceland", language: "Icelandic", region: "Iceland", description: "Icelandic" }, "it-IT": { code: "it-IT", fullName: "Italian Italy", language: "Italian", region: "Italy", description: "Standard Italian" }, "ja-JP": { code: "ja-JP", fullName: "Japanese Japan", language: "Japanese", region: "Japan", description: "Standard Japanese" }, "kn-IN": { code: "kn-IN", fullName: "Kannada India", language: "Kannada", region: "India", description: "Kannada" }, "ko-KR": { code: "ko-KR", fullName: "Korean South Korea", language: "Korean", region: "South Korea", description: "Standard Korean" }, "lt-LT": { code: "lt-LT", fullName: "Lithuanian Lithuania", language: "Lithuanian", region: "Lithuania", description: "Lithuanian" }, "lv-LV": { code: "lv-LV", fullName: "Latvian Latvia", language: "Latvian", region: "Latvia", description: "Latvian" }, "ml-IN": { code: "ml-IN", fullName: "Malayalam India", language: "Malayalam", region: "India", description: "Malayalam" }, "mr-IN": { code: "mr-IN", fullName: "Marathi India", language: "Marathi", region: "India", description: "Marathi" }, "ms-MY": { code: "ms-MY", fullName: "Malay Malaysia", language: "Malay", region: "Malaysia", description: "Malay" }, "nb-NO": { code: "nb-NO", fullName: "Norwegian Norway", language: "Norwegian", region: "Norway", description: "Norwegian Bokmål" }, "nl-BE": { code: "nl-BE", fullName: "Dutch Belgium", language: "Dutch", region: "Belgium", description: "Belgian Dutch" }, "nl-NL": { code: "nl-NL", fullName: "Dutch Netherlands", language: "Dutch", region: "Netherlands", description: "Standard Dutch" }, "pa-IN": { code: "pa-IN", fullName: "Punjabi India", language: "Punjabi", region: "India", description: "Punjabi" }, "pl-PL": { code: "pl-PL", fullName: "Polish Poland", language: "Polish", region: "Poland", description: "Polish" }, "pt-BR": { code: "pt-BR", fullName: "Portuguese Brazil", language: "Portuguese", region: "Brazil", description: "Brazilian Portuguese" }, "pt-PT": { code: "pt-PT", fullName: "Portuguese Portugal", language: "Portuguese", region: "Portugal", description: "European Portuguese" }, "ro-RO": { code: "ro-RO", fullName: "Romanian Romania", language: "Romanian", region: "Romania", description: "Romanian" }, "ru-RU": { code: "ru-RU", fullName: "Russian Russia", language: "Russian", region: "Russia", description: "Standard Russian" }, "sk-SK": { code: "sk-SK", fullName: "Slovak Slovakia", language: "Slovak", region: "Slovakia", description: "Slovak" }, "sr-RS": { code: "sr-RS", fullName: "Serbian Serbia", language: "Serbian", region: "Serbia", description: "Serbian" }, "sv-SE": { code: "sv-SE", fullName: "Swedish Sweden", language: "Swedish", region: "Sweden", description: "Swedish" }, "ta-IN": { code: "ta-IN", fullName: "Tamil India", language: "Tamil", region: "India", description: "Tamil" }, "te-IN": { code: "te-IN", fullName: "Telugu India", language: "Telugu", region: "India", description: "Telugu" }, "th-TH": { code: "th-TH", fullName: "Thai Thailand", language: "Thai", region: "Thailand", description: "Thai" }, "tr-TR": { code: "tr-TR", fullName: "Turkish Turkey", language: "Turkish", region: "Turkey", description: "Turkish" }, "uk-UA": { code: "uk-UA", fullName: "Ukrainian Ukraine", language: "Ukrainian", region: "Ukraine", description: "Ukrainian" }, "ur-IN": { code: "ur-IN", fullName: "Urdu India", language: "Urdu", region: "India", description: "Urdu" }, "vi-VN": { code: "vi-VN", fullName: "Vietnamese Vietnam", language: "Vietnamese", region: "Vietnam", description: "Vietnamese" }, "yue-HK": { code: "yue-HK", fullName: "Cantonese Hong Kong", language: "Cantonese", region: "Hong Kong", description: "Cantonese" } }; function normalizeCode(code) { var parts = code.trim().split('-'); if (parts.length === 2) { return "".concat(parts[0].toLowerCase(), "-").concat(parts[1].toUpperCase()); } return code.toLowerCase(); } var data = languageData; /** * Normalize and map array of codes to full names */ function mapLanguages(codes) { var result = {}; codes.forEach(function (code) { var norm = normalizeCode(code); if (data[norm]) { result[norm] = data[norm].fullName; } }); return result; } /** * Get language info by code */ function getLanguageInfo(code) { var norm = normalizeCode(code); return data[norm] || null; } /** * Get all language variants from a base language code */ function getAvailableVariants(baseLangs) { var bases = typeof baseLangs === 'string' ? [baseLangs] : baseLangs; var result = {}; bases.forEach(function (base) { for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) { var _b = _a[_i], code = _b[0], info = _b[1]; if (code.toLowerCase().startsWith(base.toLowerCase())) { result[code] = info.fullName; } } }); return result; } /** * ✅ NEW: Return all codes with their full names */ function listAllLanguages() { var result = {}; for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) { var _b = _a[_i], code = _b[0], info = _b[1]; result[code] = info.fullName; } return result; } /** * ✅ NEW: Search by full name, region or language (case-insensitive) */ function searchByName(term) { var result = {}; var lowerTerm = term.toLowerCase(); for (var _i = 0, _a = Object.entries(data); _i < _a.length; _i++) { var _b = _a[_i], code = _b[0], info = _b[1]; if (info.fullName.toLowerCase().includes(lowerTerm) || info.language.toLowerCase().includes(lowerTerm) || info.region.toLowerCase().includes(lowerTerm)) { result[code] = info.fullName; } } return result; } /** * ✅ NEW: Group language codes under base language */ function groupByLanguage() { var result = {}; for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) { var code = _a[_i]; var base = code.split('-')[0]; if (!result[base]) { result[base] = []; } result[base].push(code); } return result; } /** * ✅ NEW: Validate if a code exists in dataset */ function validateCode(code) { var norm = normalizeCode(code); return !!data[norm]; } exports.getAvailableVariants = getAvailableVariants; exports.getLanguageInfo = getLanguageInfo; exports.groupByLanguage = groupByLanguage; exports.listAllLanguages = listAllLanguages; exports.mapLanguages = mapLanguages; exports.searchByName = searchByName; exports.validateCode = validateCode; Object.defineProperty(exports, '__esModule', { value: true }); })); //# sourceMappingURL=bcp47-helper.js.map