|
|
|
|
@ -11,6 +11,29 @@ const messages = {
|
|
|
|
|
'en-US': enUS
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function unwrapMessageParam(value) {
|
|
|
|
|
if (value && typeof value === 'object' && 'value' in value) {
|
|
|
|
|
return value.value
|
|
|
|
|
}
|
|
|
|
|
return value
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function normalizeMessageParams(params = {}) {
|
|
|
|
|
return Object.keys(params).reduce((result, key) => {
|
|
|
|
|
result[key] = unwrapMessageParam(params[key])
|
|
|
|
|
return result
|
|
|
|
|
}, {})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function replaceMessageParams(message, params = {}) {
|
|
|
|
|
if (typeof message !== 'string') return message
|
|
|
|
|
return Object.keys(params).reduce((result, key) => {
|
|
|
|
|
const pattern = new RegExp(`\\{\\s*${key}\\s*\\}`, 'g')
|
|
|
|
|
const value = params[key]
|
|
|
|
|
return result.replace(pattern, value == null ? '' : String(value))
|
|
|
|
|
}, message)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function normalizeLocale(locale) {
|
|
|
|
|
if (locale === 'zh' || locale === 'zh_CN' || locale === 'zh-Hans') return 'zh-CN'
|
|
|
|
|
if (locale === 'en' || locale === 'en_US') return 'en-US'
|
|
|
|
|
@ -40,6 +63,17 @@ const i18n = createI18n({
|
|
|
|
|
missing: (locale, key) => key
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const rawGlobalTranslate = i18n.global.t.bind(i18n.global)
|
|
|
|
|
|
|
|
|
|
i18n.global.t = (...args) => {
|
|
|
|
|
const translated = rawGlobalTranslate(...args)
|
|
|
|
|
const paramsArg = args.find((arg) => arg && typeof arg === 'object' && !Array.isArray(arg))
|
|
|
|
|
if (!paramsArg) {
|
|
|
|
|
return translated
|
|
|
|
|
}
|
|
|
|
|
return replaceMessageParams(translated, normalizeMessageParams(paramsArg))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const literalMap = {
|
|
|
|
|
'首页': 'nav.home',
|
|
|
|
|
'报表': 'tab.report',
|
|
|
|
|
@ -102,6 +136,12 @@ export function translateLiteral(text) {
|
|
|
|
|
return text
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function translateWithParams(key, params = {}) {
|
|
|
|
|
const normalizedParams = normalizeMessageParams(params)
|
|
|
|
|
const translated = i18n.global.t(key, normalizedParams)
|
|
|
|
|
return replaceMessageParams(translated, normalizedParams)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function initializeLocale() {
|
|
|
|
|
setLocale(getSavedLocale())
|
|
|
|
|
}
|
|
|
|
|
|