@ui18n/selector-web
Version:
🌐 零依赖Web Components语言选择器 - 支持所有框架和浏览器的通用组件
74 lines (60 loc) • 2.19 kB
JavaScript
/**
* 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);
});
}