uniapp 实现项目多语言切换

UniApp开发微信小程序实现中英文切换的两种方案

avatar

2025-09-03 08:22:48

在UniApp开发微信小程序时,实现中英文切换功能是常见的国际化需求。本文将介绍两种实现方案:自定义i18n工具和vue-i18n插件,帮助开发者根据项目需求选择合适的方法。

自定义i18n工具实现方案

创建多语言资源文件

在项目的locales目录下,创建多个JSON文件存放不同语言的文本资源。例如:

en.json (英文)

json

复制

{

"hello": "Hello",

"welcome": "Welcome to our application"

}

zh.json (中文)

json

复制

{

"hello": "你好",

"welcome": "欢迎使用我们的应用程序"

}

实现i18n工具

创建i18n.js文件管理多语言逻辑:

JavaScript

复制

const locales = {

zh: require('./zh.json'),

en: require('./en.json'),

};

let currentLocale = '';

if (!uni.getStorageSync('locale')) {

const systemLanguage = uni.getSystemInfoSync().language;

currentLocale = systemLanguage.startsWith('zh') ? 'zh' : 'en';

} else {

currentLocale = uni.getStorageSync('locale');

}

const i18n = {

t(key) {

return locales[currentLocale][key] || key;

},

setLocale(locale) {

if (locales[locale]) {

currentLocale = locale;

uni.setStorageSync('locale', currentLocale);

} else {

console.warn(Locale ${locale} not found);

}

},

};

export default i18n;

在main.js中配置和引用i18n

JavaScript

复制

import Vue from 'vue';

import App from './App';

import i18n from './utils/i18n';

Vue.config.productionTip = false;

Vue.prototype.$i18n = i18n;

App.mpType = 'app';

const app = new Vue({

...App

});

app.$mount();

在页面中使用多语言功能

HTML

复制

{{ i18n.t('hello') }} {{ i18n.t('welcome') }}

<button @click="switchLanguage('en')">English

<button @click="switchLanguage('zh')">中文

使用vue-i18n插件实现方案

安装依赖

bash

复制

npm install vue-i18n@8 # Vue 2 项目

npm install vue-i18n@9 # Vue 3 项目

创建语言包文件

在项目中新建lang文件夹,存放不同语言的JSON文件:

en.json

json

复制

{

"hello": "Hello",

"welcome": "Welcome to UniApp"

}

zh-CN.json

json

复制

{

"hello": "你好",

"welcome": "欢迎使用 UniApp"

}

初始化vue-i18n

在main.js中配置国际化:

JavaScript

复制

import Vue from 'vue';

import App from './App';

import VueI18n from 'vue-i18n';

Vue.use(VueI18n);

const messages = {

en: require('@/lang/en.json'),

'zh-CN': require('@/lang/zh-CN.json'),

};

const i18n = new VueI18n({

locale: 'zh-CN', // 默认语言

messages,

});

const app = new Vue({

i18n,

...App

});

app.$mount();

在页面中使用多语言

HTML

复制

{{ t('hello') }} {{ t('welcome') }}

<button @click="switchLanguage('en')">English

<button @click="switchLanguage('zh-CN')">中文

方案对比

方案 优点 缺点

自定义i18n工具 灵活性高,适合简单需求 需要手动管理语言切换和存储

vue-i18n插件 功能强大,支持复杂需求 依赖第三方库,适合大型项目

相关推荐
陈龙龙的陈龙龙1 天前
uni-app中获取参数的几个方法
uni-app
果壳~1 天前
【Uniapp】【rich-text】富文本展示以及图片预览功能解决方案
前端·javascript·uni-app
雯0609~1 天前
微信小程序的原生开发项目如何转至uni-app
微信小程序·小程序·uni-app
四方云1 天前
Uni-app 跨端集成 SIP 电话功能(H5 + App)实战
uni-app
习明然2 天前
UniApp开发体验感受总结
前端·uni-app
anyup2 天前
全面重构的 uni-app 多平台上传组件,功能强到离谱!
前端·vue.js·uni-app
LIO2 天前
一套代码,多端并行——uni-app + Vue3 多端开发完全指南
前端·vue.js·uni-app
西洼工作室2 天前
个人资质实现微信授权登录和内嵌微信二维码扫码登录
python·微信·uni-app·全栈
求学中--2 天前
状态管理一文通:@State、@Prop、@Link、@Provide/Consume全解析
人工智能·小程序·uni-app·wpf·harmonyos
求学中--2 天前
ArkUI组件库完全指南:从基础组件到自定义装饰器
低代码·华为·小程序·uni-app·harmonyos