Internationalization
Configuration
The multilingual configuration files are located in the locales
directory, with file names in the format {language}.json
. Add languages in src\modules\i18n.ts
.
TIP
Non-JSON formats cannot be used with the I18N-Ally
plugin. Please use JSON format.
import { createI18n } from 'vue-i18n'
import type { App } from 'vue'
import enUS from '../../locales/en_US.json'
import zhCN from '../../locales/zh_CN.json'
import { local } from '@/utils'
export const i18n = createI18n({
legacy: false,
locale: local.get('lang') || 'zhCN', // Default display language
fallbackLocale: 'enUS',
messages: {
zhCN,
enUS,
},
})
export function install(app: App) {
app.use(i18n)
}
The multilingual configuration for the component library is in the src\utils\i18n.ts
file. Add the languages you need. The project will automatically switch between them.NativeUI Internationalization Documentation
import { dateZhCN, zhCN } from 'naive-ui'
export const naiveI18nOptions: Record<App.lang, { locale: NLocale | null, dateLocale: NDateLocale | null }> = {
zhCN: {
locale: zhCN,
dateLocale: dateZhCN,
},
enUS: {
locale: null,
dateLocale: null,
},
}
Vue Files
You can directly use the $t
method in the template, for example
<span>{{ $t('app.backTop') }}</span>
Use useI18n
in the setup to use it
const { t } = useI18n()
const transitionSelectorOptions = computed(() => {
return [
{
label: t('app.transitionNull'),
value: '',
}
]
})
WARNING
When using variables to render components, the variables need to be wrapped in computed
, otherwise they will not take effect.
TS Files
In ts/js
files, you cannot use the above method to get translated text. Therefore, you need to use the $t
utility method in src\utils\i18n.ts
, for example
import { $t } from '@/utils'
const label = $t('app.backTop')
Switching Languages
Use the setLocale
utility method in src\utils\i18n.ts
, for example
import { setLocale } from '@/utils'
setLocale('en')
Menu and Routes
First, you need to add menu and route translation texts in the multilingual configuration file, following this format
{
"route": {
"{your route name}": "{your route i18n text}",
}
}
In the configuration file, the key should match your route name, and the value should be your route's i18n text. For example
{
'name': 'workbench',
'path': '/dashboard/workbench',
'title': '工作台',
'requiresAuth': true,
'icon': 'icon-park-outline:alarm',
'pinTab': true,
'menuType': 'page',
'componentPath': '/dashboard/workbench/index.vue',
'id': 2,
'pid': 1,
},
{
"route": {
"workbench": "工作台",
}
}
If you haven't set the i18n text for this route, the title
will be used as the display text.