uniapp实现后端数据i18n国际化

news/2025/1/7 23:35:37/

1.在main.js配置请求获取到数据再设置到i18n中,

我这里是通过后端接口先获取到一个多个数据的的json链接,通过链接再获取数据,拿到数据后通过遍历的方式设置i18n

javascript">//接口数据示例:{"vi": "http://localhost:8899/_data/storage/languages/vi.json","zh_CN": "http://localhost:8899/_data/storage/languages/zh_CN.json","pt": "http://localhost:8899/_data/storage/languages/pt.json"
}

main.js

javascript">import App from './App'
import { getLanguageJson } from "@/api/index.js";// 初始化一个对象来存储语言数据
const i18nData = {};// 设置 i18n 配置
const i18nConfig = {locale: uni.getLocale(), // 获取当前设备语言messages: uni.getStorageSync("i18nData") || {}, // 从缓存获取语言数据silentTranslationWarn: true,missingWarn: false,silentFallbackWarn: true,fallbackWarn: false
};// 异步加载所有语言文件
const loadLanguages = async () => {try {const res = await getLanguageJson();const obj = res.data;console.log(obj);// 使用 Object.entries 生成语言文件请求的 Promise 数组const promises = Object.entries(obj).map(([lang, url]) => new Promise((resolve) => {uni.request({url: url,method: 'GET',success: (res) => {if (res.statusCode === 200 && res.data) {i18nData[lang] = res.data;console.log(`语言包 ${lang} 加载成功`);} else {console.error(`语言包 ${lang} 加载失败`);i18nData[lang] = {}; // 设置为空对象以避免错误}resolve();},fail: (err) => {console.error(`语言包 ${lang} 加载失败`, err);i18nData[lang] = {}; // 设置为空对象以避免错误resolve();}});}));// 等待所有 Promise 完成await Promise.all(promises);// 加载完语言包后保存到本地缓存uni.setStorageSync("i18nData", i18nData);} catch (error) {console.error("获取语言包列表失败", error);}
};// #ifdef VUE3import { createSSRApp } from 'vue'import { createI18n } from 'vue-i18n'var i18n = createI18n(i18nConfig);// 拿到数据后加载语言包loadLanguages().then(() => {Object.entries(i18nData).forEach(([lang, messages]) => {i18n.global.setLocaleMessage(lang, messages);console.log(`语言包 ${lang} 加载成功`);});});export function createApp() {const app = createSSRApp(App);app.use(i18n);return {app};}// #endif

2.uniapp内置的文本语言无法通过异步国际化,只能在根目录locale文件夹下提前配置好。

├── locale
│ ├── en.json
│ ├── zh-Hans.json
│ └── zh-Hant.json


http://www.ppmy.cn/news/1561004.html

相关文章

Java中使用JFreeChart生成甘特图

引言 甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配。它通过条形图显示任务的开始和结束时间,使项目经理能够直观地了解项目的整体情况。在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图表…

springboot568医院病历管理系统(论文+源码)_kaic

摘 要 随着信息时代的发展,计算机迅速普及,传统的医院病历管理方式显得不够快捷,这时我们就需要创造更加便利的管理方法,对医院病历信息进行统计,便于医院病历信息进行统一管理。将管理方式转变为信息化、智能化显得尤…

数据结构:ArrayList与顺序表

目录 📖一、什么是List 📖二、线性表 📖三、顺序表 🐬1、display()方法 🐬2、add(int data)方法 🐬3、add(int pos, int data)方法 🐬4、contains(int toFind)方法 🐬5、inde…

深度学习blog-RAG构建高效生成式AI的优选路径

RAG(Retrieval-Augmented Generation) 随着人工智能(AI)技术的飞速发展,模型的性能和应用场景也不断扩展。其中,检索增强生成(RAG, Retrieval-Augmented Generation)模型作为一种新…

【软考网工笔记】计算机基础理论与安全——知识产权

1- 许可贸易 许可贸易实际上是一种许可方用授权的形式向被许可方转让技术使用权同时也让度一定市场的贸易行为。 根据其授权程度大小,许可贸易可分为如下五种形式: (1) 独占许可 它是指在合同规定的期限和地域内,被许…

Windows系统下FFmpeg4.4的环境搭建(二)

一、FFmpeg是什么 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证,它提供了录制、转换以及流化音视频的完整方案。FFmpeg在linux平台下开发,但是它同样也可以在其它操作系统环境中编译…

基于Spring Boot智能无人仓库管理系统【附源码】

基于Spring Boot智能无人仓库管理系统 效果如下: 系统登陆页面 管理员主页面 员工管理页面 补货提醒管理页面 员工主页面 补货申请页面 取货申请管理页面 研究背景 随着全球化和信息技术的快速发展,企业的业务规模逐渐扩大,仓储作为企业供…

java根据Word模板实现动态填充导出图表,列表

本文基于文章【动态导出Word文档&#xff0c;poi-tl的前世今生及快速使用】&#xff0c;对文本、表格、图片、列表、图表等做详细的示例记录。 快速开始 引入依赖 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId>…