* 获取本地化的应用名称 * 优先级:Name[zh_CN] > Name[zh] > Name[en_US] > Name
(entry: DesktopEntry)
| 60 | * 优先级:Name[zh_CN] > Name[zh] > Name[en_US] > Name |
| 61 | */ |
| 62 | function getLocalizedName(entry: DesktopEntry): string { |
| 63 | // 获取系统语言代码(如 "zh_CN"、"en_US") |
| 64 | const lang = process.env.LANG || process.env.LANGUAGE || '' |
| 65 | const langCode = lang.split('.')[0] // 去掉编码部分 (UTF-8) |
| 66 | const parts = langCode.split('_') |
| 67 | const langBase = parts[0] // 只取语言部分 (zh) |
| 68 | |
| 69 | // 按优先级尝试本地化名称 |
| 70 | const candidates: string[] = [] |
| 71 | if (langCode) { |
| 72 | candidates.push(`Name[${langCode}]`) |
| 73 | } |
| 74 | if (parts.length > 1 && parts[1]) { |
| 75 | candidates.push(`Name[${langBase}_${parts[1]}]`) // 防御性写法 |
| 76 | } |
| 77 | if (langBase) { |
| 78 | candidates.push(`Name[${langBase}]`) // Name[zh] |
| 79 | } |
| 80 | candidates.push('Name') // 兜底 |
| 81 | |
| 82 | for (const key of candidates) { |
| 83 | const value = entry[key] |
| 84 | if (value && value.trim()) { |
| 85 | return value.trim() |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | return entry['Name']?.trim() || '' |
| 90 | } |
| 91 | |
| 92 | /** |
| 93 | * 清理 Exec 字段中的 % 参数占位符(如 %f, %u, %F, %U ...) |
no outgoing calls
no test coverage detected