解决uniapp在js文件中使用国际化报错问题

news2024/11/18 7:46:49

uniapp js 中如何使用国际化?

文章目录

    • uniapp js 中如何使用国际化?
      • main.js 配置
      • 遇到问题
      • 解决方案
        • Demo
          • 方式一:异步加载模块
            • Promise 写法
            • await写法
          • 方式二:局部引入
          • 方式三:按需导入


main.js 配置

  • main.js 引入并初始化 VueI18n
  • 全局挂载 需使用国际化的js文件
import App from './App.vue'
import messages from './locale/index'

let i18nConfig = {
	locale: uni.getLocale(),
	messages
}

// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false

import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
const i18n = new VueI18n(i18nConfig)

// 全局挂载 test js
import testCommand from './common/BLECommand.js'
Vue.prototype.testCommand = testCommand;


App.mpType = 'app'
const app = new Vue({
	i18n,
	...App
})

app.$mount()
// #endif


// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
	const app = createSSRApp(App)
	return {
		app
	}
}
// #endif

  • 具体流程看官网 以上配置在 vue 页面中可以正常使用,例:this.$t('index.demo');

遇到问题

  • 在全局注册 js 文件中,无法使用 this.$t() ,那么如何使用国际化?
  • BLECommand.js 使用国际化j时报错, 页面出现白屏
// 使用国际化
import { initVueI18n } from '@dcloudio/uni-i18n'  
import messages from '@/locale/index' 
const { t } = initVueI18n(messages)

console.log('res:', t) // 正常
console.log('get value:', t('index.demo')) // 报错

  • vue 页面调用时,直接报错,如下图
console.log('*****', this.testCommand)

在这里插入图片描述


  • 原因: 因为页面加载时,实例未加载。无法使用国际化,通过 延迟调用 会发现能正常拿到值
// 全局注册:加延迟能正常获取值
setTimeout(() => {
	console.log('get value:', t('index.demo')) //  uni-app 国际化演示
}, 0)

  • 有什么方法在 不加延迟 情况下,正常获取值?

解决方案

以下介绍几种方式,根据个人所需,欢迎指点~

  • 方式一:延迟加载模块
  • 方式二:局部引入
  • 方式三:按需导入

Demo

  • BLECommand.js
// 使用国际化
import { initVueI18n } from '@dcloudio/uni-i18n'  
import messages from '@/locale/index' 
const { t } = initVueI18n(messages)  

// 例:默认导出数组
export default {
	instructArr: [
        { key: 'quantity', command1: '0x03', command2: '0x23', name: t('index.demo') }
	]
}

方式一:异步加载模块
  • main.js中 通过异步加载模块方式,使用国际化

Promise 写法
  • import()返回一个 Promise 对象
  • 注意:数据结构多了一层default
import('./common/BLECommand.js').then((res) => {
	console.log('res:', res);
    Vue.prototype.testCommand = res.default;
})


// res
{
    "default": {
        "instructArr": [
            {
                "key": "quantity",
                "command1": "0x03",
                "command2": "0x23",
                "name": "uni-app 国际化演示"
            }
        ]
    }
}
  • 使用
console.log('*****', this.testCommand)

await写法
  • 由于import()返回 Promise 对象,所以需要使用then()方法指定处理函数。考虑到代码的清晰,更推荐使用await命令。
async function requireBLE() {
    // 等同于
    // import("./common/BLECommand.js").then(res => {
    //   Vue.prototype.testCommand = res;
    // });
    
    const command = await import('./common/BLECommand.js');
	Vue.prototype.testCommand = command;
}

requireBLE();

方式二:局部引入
import testCommand from '@/common/BLECommand.js'

  • 使用
console.log('*****', testCommand)


// result
{
    "instructArr": [
        {
            "key": "quantity",
            "command1": "0x03",
            "command2": "0x23",
            "name": "uni-app 国际化演示"
        }
    ]
}

方式三:按需导入

修改下 BLECommand.js 写法,这里新建方法

export const createInstruct = () => {
	let instructArr = [
		{ key: 'quantity', command1: '0x03', command2: '0x23', name: t('index.demo') }
	]
	
	return instructArr
}

  • 使用
import { createInstruct } from '@/common/bluetoothCommand.js'
console.log('*****', createInstruct())


// result
[
    {
        "key": "quantity",
        "command1": "0x03",
        "command2": "0x23",
        "name": "uni-app 国际化演示"
    }
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python——pyqt5的计算器(源码+打包)

目录 一、效果图 二、源码 三、如何打包 四、如何减小打包程序大小(方法1) 五、如何减小打包程序大小(方法2) 学习视频 一、效果图 只是单纯的练手,然后再学习一下如何打包 二、源码 calculator_UI.zip - 蓝奏云…

论文阅读《Centralized Feature Pyramid for Object Detection》

论文地址:https://arxiv.org/pdf/2210.02093.pdf 源码地址:https://github.com/QY1994-0919/CFPNet 概述 特征金字塔模块在众多计算机视觉任务中都有优异的性能表现。针对现有的方法过渡关注于层间的特征交互而忽略了层内的特征交互的问题,本…

药物分子虚拟筛选规则

药物分子虚拟筛选规则 Lipinski Rule RO5是辉瑞公司资深药物化学家Christopher A. Lipinski在1997年提出,虽然随时代发展虽然其适用范围逐渐变窄,但仍然非常有参考意义。其主要内容如下: 分子量(Mw)小于500;氢键供体(HBD)数目小…

matlab 对线路板进行裁剪

缺陷图像目前还没有搞定————(无奈) test1 %Sobel方法 I imread(ChuanJian0.jpg); G rgb2gray(I); E1 edge(G, sobel); figure, subplot(2,2,1); imshow(I); title(Original Color Image); subplot(2,2,2); imshow(E1); title(Sobel Edge);E2 ed…

使用PyTorch构建神经网络,并计算参数Params

文章目录 使用PyTorch构建神经网络,并计算参数Params举例计算具有全连接层的神经网络的参数数量计算卷积神经网络的参数数量Params计算过程 总结 使用PyTorch构建神经网络,并计算参数Params 在深度学习中,模型的参数数量是一个非常重要的指标…

零基础学Java好找工作吗?好程序员告诉你入行Java有多惨?

为什么小源建议普通背景、零基础的大专生、本科生去学java编程呢? 因为真的香啊!小白容易上岸,而且工作3年的话,基本年薪就能到50w(只要你工作后也一直不断努力学习)。java岗位属于技术岗,没有任…

Android进阶:Activity的生命周期和启动模式

Activity的生命周期和启动模式 作为Android四大组件之中存在感最强的组件,Activity应该是我们在学习Android中第一个碰到的新概念。在日常开发过程中我们肯定会用到Activity,但是关于Activity的一些细节问题运行机制我们可能还有一些不清楚的问题。今天…

调用百度文心AI作画API实现中文-图像跨模态生成

作者介绍 乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。 研究方向:机器视觉与人工智能。 电子邮件:1078914066qq.com 一.文心AI作画API介绍 1. 文心AI作画 文…

全开源ChatGPT聊天机器人商业版源码/支持魔改/完全开放源代码

🎈 限时活动领体验会员:可下载程序网创项目短视频素材 🎈 ☑️ 品牌:ChatGPT ☑️ 语言:PHP ☑️ 类型:ChatGPT ☑️ 支持:PCWAP 🎉 有需要的朋友记得关赞评,需要的底部获…

C++哈希

目录 一、认识哈希表 1.unordered_set和unordered_map 2.哈希表的概念 二、闭散列哈希表的实现 1.底层本质 (1)哈希表的存储结构 (2)元素的插入与查找 (3)哈希冲突 (4)负载…

深入浅出C++ ——线程库

文章目录 线程库thread类的简单介绍线程函数参数原子性操作库 mutex的种类std::mutexstd::recursive_mutexstd::timed_mutexstd::recursive_timed_mutex lock_guard与unique_locklock_guardunique_lock condition_variable 线程库 thread类的简单介绍 在C11之前,涉…

“广东省五一劳动奖章”获得者卫晓欣:“她”力量让新兴技术更获认可

近日,2023年广东省庆祝“五一”国际劳动节暨五一劳动奖表彰大会顺利召开,大会表彰了2023年全国和省五一劳动奖、工人先锋号代表。 其中,来自FISCO BCOS开源社区产业应用合作伙伴广电运通的创新中心总监卫晓欣,凭借在区块链领域的…

分布式锁Redisson对于(不可重入、不可重试、超时释放、主从一致性)四个问题的应对

文章目录 1 Redisson介绍2 Redisson快速入门3 Redisson可重入锁原理4 Redisson锁重试和WatchDog机制5 Redisson锁的MutiLock原理 基于setnx实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff…

Ai作图可控性演进——从SD到MJ

背景 Ai作图从Diffusion模型开始,作图进入稳步发展快车道。然后用过diffusion系列作图的同学对产图稳定性,以及可控性都会颇有微词。diffusion系列作图方法在宏观层面上确实能够比较好的做出看上去还不错的图。然后当你细抠细节时候,发现这东…

远程服务器搭建jupyter lab并在本地访问

1、安装jupyter pip install jupyter 可以直接在base环境下安装 2、配置jupyter 2.1 密钥生成 进入python交互模式,输入以下代码: from jupyter_server.auth import passwd passwd()然后输入密码,得到一串密钥,保存一下 2.2…

Java多线程入门到精通学习大全?了解几种线程池的基本原理、代码示例!(第五篇:线程池的学习)

本文介绍了Java中三种常用的线程池:FixedThreadPool、CachedThreadPool和ScheduledThreadPool,分别介绍了它们的原理、代码示例以及使用注意事项。FixedThreadPool适用于并发量固定的场景,CachedThreadPool适用于执行时间短的任务&#xff0c…

Linux C/C++后台开发面试重点知识

Linux C/C后台开发面试重点知识 文章转载自个人博客: Linux C/C后台开发面试重点知识 查看目录 一、C 面试重点 本篇主要是关于 C 语言本身,如果是整个后台技术栈的学习路线,可以看这篇文章: Linux C 后台开发学习路线 对于 C 后台开发面试来说&…

27岁转行学云计算值得吗?能就业不?

27岁转行学云计算值得吗?能就业不? 首先,云计算当然值得转行了,如此肯定的观点,应该没有人会反对吧,尤其是对IT行业的现状以及就业市场有所了解的人。如果你对这一点有所怀疑也很正常,只要通过各…

Spring Boot集成ShardingSphere分片利器 AutoTable (一)—— 简单体验 | Spring Cloud 45

一、背景 Sharding是 Apache ShardingSphere 的核心特性,也是 ShardingSphere 最被人们熟知的一项能力。在过去,用户若需要进行分库分表,一种典型的实施流程(不含数据迁移)如下: 用户需要准确的理解每一张…

详解快速排序的类型和优化

详解快速排序的优化 前言快排的多种写法霍尔法实现快排代码部分 挖坑法思路讲解代码部分 双指针法思路讲解代码部分 针对排序数类型的优化针对接近或已经有序数列和逆序数列三数取中代码实现 随机数 针对数字中重复度较高的数三路划分思路讲解代码部分 根据递归的特点进行优化插…