商城后台管理系统 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')
相关推荐
Csvn35 分钟前
性能监控
前端
Highcharts.js37 分钟前
Highcharts Gantt使用符号的自定义数据标签开发甘特图示例
javascript·甘特图·highcharts·图表开发·实战代码·响应式图表
Csvn1 小时前
构建工具
前端
FRing032 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Java小卷2 小时前
JuanForm vs FormCreate!Vue3 表单引擎联动配置 PK!
vue.js·低代码
kyriewen4 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒4 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫4 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus5 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬6 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端