当前位置: 首页 > news >正文

uniapp实现后端数据i18n国际化

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

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

//接口数据示例:{"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

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.lryc.cn/news/515979.html

相关文章:

  • 什么是国密设计
  • Android IO 问题:java.io.IOException Operation not permitted
  • 安装bert_embedding遇到问题
  • cka考试-03-k8s版本升级
  • 【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
  • Spring Boot 的自动配置,以rabbitmq为例,请详细说明
  • Visual Studio 2022+Qt6.5.3安装教程+环境配置+创建Qt项目+乱码插件+运行很完美(16岁孩子也能看懂)
  • LeetCode - 初级算法 数组(旋转数组)
  • logback日志框架源码分析
  • 【微服务】3、配置管理
  • 数据分析思维(七):分析方法——群组分析方法
  • 概述(讲讲python基本语法和第三方库)
  • 力扣-20-有效的括号-栈
  • 数据在内存中的存储【C语言版】
  • 【SQL】进阶知识 — 各大数据库合并几条数据到一行的方式
  • Gitee上传项目代码教程(详细)
  • python ijson 用法教程
  • 什么是网络安全攻防演练,即红蓝对抗?
  • 数据挖掘——决策树分类
  • Pytorch单、多GPU和CPU训练模型保存和加载
  • Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具)
  • Pytest 高级用法:间接参数化
  • 第07章 存储管理(一)
  • Go语言的 的设计模式(Design Patterns)核心知识
  • js函数预览图片:支持鼠标和手势拖拽缩放
  • 用QT实现 端口扫描工具1
  • 设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
  • vue 项目集成 electron 和 electron 打包及环境配置
  • vscode如何离线安装插件
  • 计算机网络常见面试题及解答