网页多语言翻译-适配ant/element
目前ant/element的i18n多语言支持仅仅支持部分初始化配置设置的按钮以及菜单,无法实现tag/动态数据/input校验/input提示/modal等动态类似于翻译的渲染



Last updated
// 根据dom修改内文本
export const replaceTextContent = (el) => {
langs = tool.data.get('SNOWY_LANGUAGE')
app_lang = tool.data.get('APP_LANG') || sysConfig.LANG
if (langs && el) {
if (el.childNodes && el.textContent) {
const keys = el.textContent.replace(/:|:/g, '').trim()
if (langs[keys] && langs[keys][app_lang] && el.childNodes.length == 0) {
const oldName = keys
if (oldName !== langs[keys][app_lang]) {
el.textContent = langs[keys][app_lang]
langs[langs[oldName][app_lang]] = langs[oldName]
tool.data.set('SNOWY_LANGUAGE', langs)
}
}
Array.from(el.childNodes).forEach(replaceTextContent)
}
}
}
// 根据className以及节点层级 以主节点为作用域 更新虚拟dom
export const loadNewLangNames = (names) => {
if (names && typeof names == 'string') {
getQueryDom(names)
} else if (names && names instanceof Array) {
names.map((item) => {
getQueryDom(item)
})
} else {
;[
'.ant-menu-title-content',
'.ant-tabs-nav-list .ant-tabs-tab-btn',
'.ant-table-thead',
'.ant-form-item-required',
'.ant-form-item-label',
'.ant-steps-item-title',
'.ant-radio-wrapper',
'.langs-title'
].map((item) => {
getQueryDom(item)
})
}
}
const getQueryDom = (item) => {
const dom = document.querySelectorAll(item)
Array.from(dom).forEach((e) => {
replaceTextContent(e)
})
}// new MutationObserver
const Observer = new MutationObserver((list) => {
classArr.forEach((item) => {
if (document.querySelector(item)) {
loadNewLangNames(item)
}
})
})
Observer.observe(contents, { attributes: false, childList: true, subtree: true
})