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 localescurrentLocalekey || key;

},

setLocale(locale) {

if (localeslocale) {

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插件 功能强大,支持复杂需求 依赖第三方库,适合大型项目

相关推荐
古韵4 小时前
你的 uni-app 分页,一个 hook 搞定竞态和加载
javascript·vue.js·uni-app
游戏开发爱好者811 小时前
iOS应用加固方案全解析:源码加固与IPA在线加固对比
android·macos·ios·小程序·uni-app·cocoa·iphone
满栀58512 小时前
uni-app 小程序开发实战:从路由踩坑、数据对接到 UI 优化的全方位复盘
ui·uni-app·notepad++
他叫自己MR张1 天前
uni-app 应用启动报uni-ad业务状态异常(-9002)【已解决】
uni-app
2501_915909061 天前
iOS应用性能监控 Instruments工具与崩溃日志分析完整指南
android·ios·小程序·https·uni-app·iphone·webview
2501_915918412 天前
详解iOS App上架至App Store的全流程步骤与注意事项
android·macos·ios·小程序·uni-app·cocoa·iphone
anyup2 天前
终于在今天入选了 Gitee GVP,这真值得庆祝~
前端·uni-app·开源
虚惊一场2 天前
撤销为什么只需要 pop:用事件重放实现离线台球计分
微信小程序·uni-app
虚惊一场2 天前
从一个小程序到一座工具箱:uni-app 分包与 Flask 微服务实践
微信小程序·uni-app
Cry丶2 天前
【已解决】adb devices 能识别手机,但 HBuilderX 搜索不到设备的避坑指南
android·adb·uni-app·hbuilderx·真机调试