商城后台管理系统 01 Vue-i18n国际化

国际化有三部分要做

复制代码
1, vue页面上的国际化----使用 vue-i18n 插件

2,后台接口 国际化

3, 第三方库实现国际化 比如element-ui  wangEditor

vue-i18n 官网

复制代码
https://vue-i18n.intlify.dev/guide/installation
1, 介绍
vue I18n是 vue.js 的国际化插件,他可以轻松地将一些本地功能集成到你的vue.js应用程序中。
2, 安装
复制代码
npm install vue-i18n -S

npm install vue-i18n@"*" -S
npm install vue-i18n@8.x -S

vue-i18n@8.28.2: Vue I18n v8.x has reached EOL and is no longer actively maintained. About maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html

3, 引入 main.js中全局引入

复制代码
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
4,准备翻译的语言环境信息
复制代码
const i18n = createI18n({
  locale: 'ja',
  fallbackLocale: 'en',
  messages: {
    en: { // 英文
      home: {
        hello: 'hello world',
      },
      goods: {
			home: 'home',
			goods: 'Goods Manage',
			params: 'Specification parameters'
		}
    },
    zh: { // 中文
      home: {
        hello: '您好 世界',
      },
      goods: {
			home: '首页',
			goods: '商品管理',
			params: '规格参数'
		}
    }
  }
})
5,通过选项创建 VueI18n 实例
复制代码
const i18n = new VueI18n({
	// locale: 'ja', // 设置地区
	locale: 'en', // 设置地区
	message, // 设置地址信息
})
6,通过 "i18n" 选项创建vue实例 导出
复制代码
new Vue({i18n}).$mount('#app')
7, 使用语法 调语言包
复制代码
<p>{{ $t("home.hello") }}</p>
8, 实例
使用示例如下

src/lang/index.js

复制代码
import Vue from 'vue'
import VueI18n from 'vue-i18n'

Vue.use(VueI18n)

src/utils/country.js

全世界语言及缩写
复制代码
AA:阿法尔语
FR:法语
LI:林堡语
SE:北萨米语 
AB:阿布哈兹语
FY:弗里西亚语
LN:林加拉语
SG:桑戈语 
AE:阿维斯陀语
GA:爱尔兰语
LO:老挝语
SH:塞尔维亚-克罗地亚语 
AF:南非语
GD:苏格兰盖尔语
LT:立陶宛语
SI:僧加罗语 
AK:阿坎语
GL:加利西亚语
LU:卢巴语
SK:斯洛伐克语 
AM:阿姆哈拉语
GN:瓜拉尼语
LV:拉脱维亚语
SL:斯洛文尼亚语 
AN:阿拉贡语
GU:古吉拉特语
MG:马达加斯加语
SM:萨摩亚语 
AR:阿拉伯语
GV:马恩岛语
MH:马绍尔语
SN:绍纳语 
AS:阿萨姆语
HA:豪萨语
MI:毛利语
SO:索马里语 
AV:阿瓦尔语
HE:希伯来语
MK:马其顿语
SQ:阿尔巴尼亚语 
AY:艾马拉语
HI:印地语
ML:马拉亚拉姆语
SR:塞尔维亚语 
AZ:阿塞拜疆语
HO:希里莫图语
MN:蒙古语
SS:斯瓦特语 
BA:巴什基尔语
HR:克罗地亚语
MO:摩尔达维亚语
ST:南索托语 
BE:白俄罗斯语
HT:海地克里奥尔语
MR:马拉提语
SU:巽他语 
BG:保加利亚语
HU:匈牙利语
MS:马来语
SV:瑞典语 
BH:比哈尔语
HY:亚美尼亚语
MT:马耳他语
SW:斯瓦希里语 
BI:比斯拉马语
HZ:赫雷罗语
MY:缅甸语
TA:泰米尔语 
BM:班巴拉语
IA:国际语A
NA:瑙鲁语
TE:泰卢固语 
BN:孟加拉语
ID:印尼语
NB:书面挪威语
TG:塔吉克语 
BO:藏语
IE:国际语E
ND:北恩德贝勒语
TH:泰语 
BR:布列塔尼语
IG:伊博语
NE:尼泊尔语
TI:提格里尼亚语 
BS:波斯尼亚语
II:四川彝语(诺苏语)
NG:恩敦加语
TK:土库曼语 
CA:加泰隆语
IK:依努庇克语
NL:荷兰语
TL:他加禄语 
CE:车臣语
IO:伊多语
NN:新挪威语
TN:塞茨瓦纳语 
CH:查莫罗语
IS:冰岛语
NO:挪威语
TO:汤加语 
CO:科西嘉语
IT:意大利语
NR:南恩德贝勒语
TR:土耳其语 
CR:克里语
IU:因纽特语
NV:纳瓦霍语
TS:宗加语 
CS:捷克语
JA:日语
NY:尼扬贾语
TT:塔塔尔语 
CU:古教会斯拉夫语
JV:爪哇语
OC:奥克语
TW:特威语 
CV:楚瓦什语
KA:格鲁吉亚语
OJ:奥吉布瓦语
TY:塔希提语 
CY:威尔士语
KG:刚果语
OM:奥洛莫语
UG:维吾尔语 
DA:丹麦语
KI:基库尤语
OR:奥利亚语
UK:乌克兰语 
DE:德语
KJ:宽亚玛语
OS:奥塞梯语
UR:乌尔都语 
DV:迪维希语
KK:哈萨克语
PA:旁遮普语
UZ:乌兹别克语 
DZ:不丹语
KL:格陵兰语
PI:巴利语
VE:文达语 
EE:埃维语
KM:高棉语
PL:波兰语
VI:越南语 
EL:现代希腊语
KN:卡纳达语
PS:普什图语
VO:沃拉普克语 
EN:英语
KO:朝鲜语、韩语
PT:葡萄牙语
WA:沃伦语 
EO:世界语
KR:卡努里语
QU:凯楚亚语
WO:沃洛夫语 
ES:西班牙语
KS:克什米尔语
RM:罗曼什语
XH:科萨语 
ET:爱沙尼亚语
KU:库尔德语
RN:基隆迪语
YI:依地语 
EU:巴斯克语
KV:科米语
RO:罗马尼亚语
YO:约鲁巴语 
FA:波斯语
KW:康沃尔语
RU:俄语
ZA:壮语 
FF:富拉语
KY:吉尔吉斯语
RW:卢旺达语
ZH:中文、汉语 
FI:芬兰语
LA:拉丁语
SA:梵语
ZU:祖鲁语 
FJ:斐济语
LB:卢森堡语
SC:萨丁尼亚语
FO:法罗语
LG:卢干达语
SD:信德语 
Vue-i18n国际化 实现代码如下
复制代码
1, src/views/Layout/Content.vue
<template>
	<div>
		<div class="header">
			<i v-if="!isCollapse" @click="changeMenu" class="iconfont icon-right-indent"></i>
			<i v-else @click="changeMenu" class="iconfont icon-left-indent"></i>
			<div class="header-right">
				<el-dropdown @command='clickLang'>
					<span class="el-dropdown-link" style="color: #fff;">
						选择语言<i class="el-icon-arrow-down el-icon--right"></i>
					</span>
					<el-dropdown-menu slot="dropdown">
						<el-dropdown-item command='zh'>中文</el-dropdown-item>
						<el-dropdown-item command='en'>English</el-dropdown-item>
						<!-- <el-dropdown-item>韩文</el-dropdown-item>
						<el-dropdown-item disabled>FR:法语</el-dropdown-item>
						<el-dropdown-item divided>LI:林堡语</el-dropdown-item> -->
					</el-dropdown-menu>
				</el-dropdown>
				<div class="user">
					欢迎:xx
					<span>退出登录</span>
				</div>
			</div>
		</div>
		<!-- 右侧内容区域 --左侧 路由出口 -->
		<div class="content">
			<!-- 路由出口 -->
			<router-view />
		</div>
	</div>
</template>

<script>
	export default {
		props: ['isCollapse'],
		methods: {
			changeMenu() {
				// 点击切换按钮的时候,修改父组件的数据 isCollapse
				this.$emit('changeCollapse')
			},
			clickLang(command) {
				console.log(command);
				// console.log(this); // 打印参数
				this.$i18n.locale = command; // 切换语言
			}
		},
	};
</script>

<style lang="less" scoped>
	.header {
		height: 50px;
		line-height: 50px;
		color: #fff;
		background: #1e78bf;

		.iconfont {
			font-size: 24px;
		}
	}

	.header-right {
		display: flex;
		float: right;
		padding-right: 20px;

		.user {
			margin-left: 20px;
		}
	}
</style>





2, src/views/Layout/Mymenu.vue
<template>
	<div>
		<el-menu :default-active="$route.path" class="el-menu-vertical-demo" background-color="#545c64"
			text-color="#fff" active-text-color="#ffd04b" router :collapse="isCollapse">
			<el-menu-item>
				<i class="iconfont icon-icon_nav" style="color: skyblue;padding-right: 6px;font-size: 24px;"></i>
				<span slot="title">易购后台管理系统</span>
			</el-menu-item>
			<el-menu-item index="/">
				<i class="el-icon-menu"></i>
				<span slot="title">{{ $t("menu.home") }}</span>
				<!-- <span slot="title">首页</span> -->
			</el-menu-item>
			<el-menu-item index="/goods">
				<i class="el-icon-document"></i>
				<span slot="title">{{ $t("menu.goods") }}</span>
				<!-- <span slot="title">商品管理</span> -->
			</el-menu-item>
			<el-menu-item index="/params">
				<i class="el-icon-setting"></i>
				<span slot="title">{{ $t("menu.params") }}</span>
				<!-- <span slot="title">规格参数</span> -->
			</el-menu-item>
			<el-menu-item index="/advert">
				<i class="el-icon-setting"></i>
				<span slot="title">广告分类</span>
			</el-menu-item>
			<el-menu-item index="/my">
				<i class="el-icon-setting"></i>
				<span slot="title">个人中心</span>
			</el-menu-item>
			<el-menu-item index="/logistics">
				<i class="el-icon-setting"></i>
				<span slot="title">物流管理</span>
			</el-menu-item>
			<el-submenu index="/order">
				<template slot="title">
					<i class="el-icon-location"></i>
					<span>订单管理</span>
				</template>
				<el-menu-item-group>
					<template slot="title">订单</template>
					<el-menu-item index="/order/order-list">
						<i class="el-icon-document"></i>
						<span>订单列表</span>
					</el-menu-item>
					<el-menu-item index="/order/order-back">
						<i class="el-icon-setting"></i>
						<span>退货管理</span>
					</el-menu-item>
				</el-menu-item-group>
				<el-menu-item-group>
					<template slot="title">分组一</template>
					<el-menu-item index="5-3">选项1</el-menu-item>
					<el-menu-item index="5-4">选项2</el-menu-item>
				</el-menu-item-group>
				<el-menu-item-group title="分组2">
					<el-menu-item index="5-5">选项3</el-menu-item>
				</el-menu-item-group>
				<el-submenu index="1-4">
					<template slot="title">选项4</template>
					<el-menu-item index="1-4-1">选项1</el-menu-item>
				</el-submenu>
			</el-submenu>
		</el-menu>
	</div>
</template>

<script>
	export default {
		// 子组件Mymenu接收父组件(index)传递过来的数据
		props: ['isCollapse'],
		data() {
			return {
				// isCollapse: false
			};
		},
	};
</script>

<style lang="less" scoped>
	.el-menu {
		border-right: 0;

		.is-active {
			background: #1e78bf !important;
			color: #fff !important;
		}
	}

	.el-menu-vertical-demo:not(.el-menu--collapse) {
		width: 200px;
		min-height: 400px;
	}
</style>





3, src/lang/index.js

import Vue from 'vue'
import VueI18n from 'vue-i18n'

Vue.use(VueI18n)

// 1,准备语言
const messages = {
	// 1, 英文
	en: {
		menu: {
			home: 'home',
			goods: 'Goods Manage',
			params: 'Specification'
		}
	},

	// 2, 中文
	zh: {
		menu: {
			home: '首页',
			goods: '商品管理',
			params: '规格参数'
		}
	}
}

// 2, 通过选项创建 VueI18n 实例
const i18n = new VueI18n({
	locale: 'zh', // 当前选中的语言
	messages, // 语言环境
})

// 导出 i18n
export default i18n




4, main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import '@/plugins/element.js'
import '@/assets/css/reset.css'
import '@/assets/css/iconfont.css'

// 挂载 api 
import api from './api/index.js'
Vue.prototype.$api = api;

// 导入语言
import i18n from '@/lang/index.js'

Vue.config.productionTip = false

new Vue({
	router,
	store,
	i18n,
	render: function(h) {
		return h(App)
	}
}).$mount('#app')
相关推荐
期待のcode5 小时前
Vue的安装创建与运行
前端·javascript·vue.js
+VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计·旅游
百锦再5 小时前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构
旺仔Sec5 小时前
2025年海南省职业院校技能大赛“应用软件系统开发“赛项竞赛样题
前端·应用软件系统开发
码界奇点5 小时前
基于SpringBoot和Vue的Fuint门店会员营销系统设计与实现
vue.js·spring boot·后端·毕业设计·springboot·源代码管理
FakeOccupational6 小时前
【树莓派 002】 RP2040 实现示波器 PIO来驱动 ADC10080 并抓取数据方案+ 内置12-bitADC&DMA&网页前端可视化方案
前端
至善迎风6 小时前
Bun:下一代 JavaScript 运行时与工具链
开发语言·javascript·ecmascript·bun
DJ斯特拉6 小时前
Vue工程化
前端·javascript·vue.js