UNPKG

@ui18n/selector-web

Version:

🌐 零依赖Web Components语言选择器 - 支持所有框架和浏览器的通用组件

74 lines (60 loc) 2.19 kB
/** * UI18N 语言工具模块 * 提供语言代码标准化、本地化名称获取等功能 */ import { LANGUAGE_NAMES } from './language-names.js'; /** * 标准化语言代码 * @param {string} locale - 语言代码 * @returns {string} 标准化后的语言代码 */ export function normalizeLocale(locale) { if (!locale || typeof locale !== 'string') return 'en'; const cleaned = locale.trim().toLowerCase(); // 处理常见变体 if (cleaned === 'zh' || cleaned === 'zh-cn' || cleaned === 'zh-hans') return 'zh-CN'; if (cleaned === 'zh-tw' || cleaned === 'zh-hk' || cleaned === 'zh-hant') return 'zh-TW'; if (cleaned === 'en' || cleaned === 'en-us') return 'en'; return cleaned; } /** * 获取语言的本地化显示名称 * @param {string} lang - 语言代码 (如 "zh-CN", "en", "ja") * @returns {string} 本地化显示名称 (如 "简体中文", "English", "日本語") */ export function labelForLang(lang) { const normalized = normalizeLocale(lang); // 使用统一的语言名称映射表 return LANGUAGE_NAMES[normalized] || normalized; } /** * 获取用户系统语言 * @returns {string} 用户系统语言代码 */ export function getUserSystemLanguage() { if (typeof navigator === 'undefined') return 'en'; return navigator.language || navigator.userLanguage || 'en'; } /** * 获取用户系统语言的本地化名称 * @returns {string} 用户系统语言的显示名称,如果无法检测则返回 "English" */ export function getUserSystemLanguageLabel() { return labelForLang(getUserSystemLanguage()); } /** * 过滤语言列表 * @param {string[]} languages - 语言代码列表 * @param {string} query - 搜索查询 * @returns {string[]} 过滤后的语言列表 */ export function filterLanguages(languages, query) { if (!query || !query.trim()) return languages; const q = query.trim().toLowerCase(); return languages.filter(lang => { const label = labelForLang(lang).toLowerCase(); const code = lang.toLowerCase(); // 匹配语言名称或代码 return label.includes(q) || code.includes(q); }); }