修复bug

This commit is contained in:
2026-05-04 17:49:00 +08:00
parent e1c9068ab0
commit 2f0479ea05
10 changed files with 531 additions and 101 deletions
+107 -17
View File
@@ -7,10 +7,49 @@ import enUS from './locale/en-US.js'
import idID from './locale/id-ID.js'
import uView from '@climblee/uv-ui'
import { initConsoleControl } from './config/console.js'
import { getSystemConfig } from './config/api/system.js'
// #ifdef H5
// 兼容部分依赖/构建产物在浏览器环境访问 process.env 的场景
if (typeof globalThis !== 'undefined' && typeof globalThis.process === 'undefined') {
globalThis.process = { env: {} }
}
if (typeof globalThis !== 'undefined' && globalThis.process && !globalThis.process.env) {
globalThis.process.env = {}
}
// #endif
// 初始化 console 控制
initConsoleControl()
const LANGUAGE_STORAGE_KEY = 'language'
const SUPPORTED_LANGUAGES = ['zh-CN', 'en-US', 'id-ID']
const LANGUAGE_ALIASES = {
zh: 'zh-CN',
'zh-cn': 'zh-CN',
'zh_cn': 'zh-CN',
en: 'en-US',
'en-us': 'en-US',
'en_us': 'en-US',
id: 'id-ID',
'id-id': 'id-ID',
'id_id': 'id-ID',
in: 'id-ID',
'in-id': 'id-ID',
'in_id': 'id-ID'
}
const normalizeLanguage = (lang) => {
if (!lang || typeof lang !== 'string') return ''
const cleaned = lang.trim()
if (!cleaned) return ''
const lower = cleaned.toLowerCase()
if (LANGUAGE_ALIASES[lower]) return LANGUAGE_ALIASES[lower]
if (SUPPORTED_LANGUAGES.includes(cleaned)) return cleaned
return ''
}
// 检测是否为 H5 环境
const isH5Platform = () => {
try {
@@ -25,42 +64,69 @@ const isH5Platform = () => {
// 获取系统语言
const getSystemLanguage = () => {
// H5 环境默认使用印尼语
if (isH5Platform()) {
return 'id-ID'
}
// 非 H5 环境根据系统语言判断
let language = 'en-US'
let language = 'zh-CN'
try {
const systemInfo = uni.getSystemInfoSync()
if (systemInfo && systemInfo.language) {
language = systemInfo.language === 'zh' || systemInfo.language.indexOf('zh') === 0
? 'zh-CN'
: 'en-US'
const systemInfo = uni.getSystemInfoSync() || {}
const systemLanguage = normalizeLanguage(systemInfo.language)
if (systemLanguage) {
language = systemLanguage
} else if (isH5Platform() && typeof navigator !== 'undefined') {
const browserLanguage = normalizeLanguage(navigator.language || '')
if (browserLanguage) language = browserLanguage
}
} catch (e) {
console.error('获取系统语言失败:', e)
// 默认使用中文
language = 'zh-CN'
}
return language
}
const extractLanguageFromConfig = (data) => {
if (!data) return ''
if (typeof data === 'string') {
return normalizeLanguage(data)
}
if (Array.isArray(data)) {
for (const item of data) {
const fromItem = extractLanguageFromConfig(item)
if (fromItem) return fromItem
}
return ''
}
if (typeof data === 'object') {
const direct = normalizeLanguage(
data.language || data.lang || data.locale || data.defaultLanguage || data.defaultLang
)
if (direct) return direct
for (const [key, value] of Object.entries(data)) {
const keyLower = String(key).toLowerCase()
if (keyLower.includes('lang') || keyLower.includes('locale')) {
const parsed = extractLanguageFromConfig(value)
if (parsed) return parsed
}
}
}
return ''
}
// 获取用户选择的语言
const getSavedLanguage = () => {
try {
const savedLang = uni.getStorageSync('language')
const savedLang = normalizeLanguage(uni.getStorageSync(LANGUAGE_STORAGE_KEY))
if (savedLang) {
return savedLang
}
const systemLang = getSystemLanguage()
uni.setStorageSync('language', systemLang)
uni.setStorageSync(LANGUAGE_STORAGE_KEY, systemLang)
return systemLang
} catch (e) {
console.error('语言设置出错:', e)
// 出错时根据平台返回默认语言
return isH5Platform() ? 'id-ID' : 'zh-CN'
return 'zh-CN'
}
}
@@ -104,6 +170,27 @@ function getI18nInstance() {
return i18nInstance
}
const syncLanguageFromRemoteConfig = async (i18n) => {
if (!isH5Platform()) return
try {
const res = await getSystemConfig()
if (!res || res.code !== 200) return
const remoteLang = extractLanguageFromConfig(res.data)
if (!remoteLang) return
const current = normalizeLanguage(i18n?.global?.locale || '')
if (current !== remoteLang) {
uni.setStorageSync(LANGUAGE_STORAGE_KEY, remoteLang)
i18n.global.locale = remoteLang
console.log('H5 语言已按系统配置更新为:', remoteLang)
}
} catch (e) {
console.warn('读取系统配置语言失败,使用本地语言设置:', e)
}
}
export function createApp() {
const app = createSSRApp(App)
@@ -116,6 +203,9 @@ export function createApp() {
// 使用 i18n
app.use(i18n)
// H5 端通过系统配置同步语言(异步,不阻塞应用启动)
syncLanguageFromRemoteConfig(i18n)
// 手动注入 $i18n 到全局属性(确保组件可以访问)
app.config.globalProperties.$i18n = i18n.global