Library: - 添加 checkbox 和鼠标框选功能 - Unregistered 卡片添加快速注册按钮 - 状态标签移至左下方,人脸图标移至左侧中间 - Deep Scan 改为 unregister -> register -> process - 完整国际化(日语、繁体中文、英语) PeopleView: - 修复卡片不显示问题(使用 get_file_traces API) - 移除对 identity_id 字段的依赖 其他: - 添加日语语言包 - 添加 useDragSelect composable - 新增文档:Face Bbox Null Bug Report
79 lines
1.8 KiB
TypeScript
79 lines
1.8 KiB
TypeScript
import { createI18n } from 'vue-i18n'
|
|
import en from './en.json'
|
|
import zhTW from './zh-TW.json'
|
|
import ja from './ja.json'
|
|
|
|
export type MessageSchema = typeof en
|
|
|
|
const supportedLanguages = {
|
|
'en': en,
|
|
'zh-TW': zhTW,
|
|
'ja': ja,
|
|
}
|
|
|
|
function detectInitialLanguage(): string {
|
|
const saved = localStorage.getItem('app_language')
|
|
if (saved && saved in supportedLanguages) {
|
|
return saved
|
|
}
|
|
|
|
if (saved === 'auto') {
|
|
return detectOSLanguage()
|
|
}
|
|
|
|
return 'en'
|
|
}
|
|
|
|
function detectOSLanguage(): string {
|
|
let osLang = 'en'
|
|
|
|
try {
|
|
if ((window as any).__TAURI__) {
|
|
const locale = (window as any).__TAURI__?.os?.getLocale?.()
|
|
if (locale) osLang = locale
|
|
} else {
|
|
osLang = navigator.language || 'en'
|
|
}
|
|
} catch (e) {
|
|
console.error('Language detection failed:', e)
|
|
}
|
|
|
|
if (osLang.startsWith('zh-TW') || osLang.startsWith('zh-Hant')) {
|
|
return 'zh-TW'
|
|
} else if (osLang.startsWith('zh-CN') || osLang.startsWith('zh-Hans')) {
|
|
return 'zh-CN'
|
|
} else if (osLang.startsWith('ja')) {
|
|
return 'ja'
|
|
} else if (osLang.startsWith('ko')) {
|
|
return 'ko'
|
|
}
|
|
|
|
return 'en'
|
|
}
|
|
|
|
const i18n = createI18n<[MessageSchema], 'en' | 'zh-TW' | 'ja'>({
|
|
legacy: false,
|
|
locale: detectInitialLanguage(),
|
|
fallbackLocale: 'en',
|
|
messages: supportedLanguages as any,
|
|
missingWarn: false,
|
|
fallbackWarn: false,
|
|
})
|
|
|
|
export function changeLanguage(lang: string) {
|
|
if (lang === 'auto') {
|
|
localStorage.setItem('app_language', 'auto')
|
|
const detected = detectOSLanguage()
|
|
i18n.global.locale = detected as any
|
|
} else {
|
|
localStorage.setItem('app_language', lang)
|
|
i18n.global.locale = lang as any
|
|
}
|
|
}
|
|
|
|
export function getCurrentLanguage(): string {
|
|
return i18n.global.locale as string
|
|
}
|
|
|
|
export { detectOSLanguage }
|
|
export default i18n |