Sakura_ljj
Sakura_ljj
  • 发布:2026-01-19 15:15
  • 更新:2026-01-19 15:32
  • 阅读:20

实机测试时vue-i18n实现多语言时,使用最新的消息插值办法没有效果

分类:uni-app

在语言文件中定义detailTitle: (ctx) => 错题集-${JSON.stringify(ctx)}复习,我这里打印出ctx的内容只有一个type:text,vue-i18n版本为11.2.7;
使用vue版本为vue3;
这是我i18n配置内容:
import { createI18n } from 'vue-i18n'
import zh from './locales/zh'
import en from './locales/en'

// 创建 i18n 实例
const i18n = createI18n({
legacy: false, // 使用 Composition API 模式
locale: 'zh', // 默认语言
fallbackLocale: 'en', // 回退语言
messages: {
zh,
en
},
globalInjection: true
})

export default i18n
模板中使用方式:
{{ t('mistakes.detailTitle', ['123']) }}

2026-01-19 15:15 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

在 uniapp 中使用 vue-i18n 时,小程序和 App 端对消息插值有特殊限制。根据迁移指南小程序和 App 端不支持插值方式定义国际化,需改用 Messages Functions 方式。

您当前使用的 vue-i18n 11.2.7 版本过高,uniapp 推荐固定使用 vue-i18n@9.1.9。问题原因:

  1. uniapp 运行环境对高阶 i18n 特性支持有限
  2. 数组传参方式 ['123'] 不被支持,应改用对象传参

正确实现方式:

// 语言文件定义  
detailTitle: ({ count }) => `错题集-${count}复习`  

// 模板中使用  
{{ $t('mistakes.detailTitle', { count: 123 }) }}

注意:

内容为 AI 生成,仅供参考
Sakura_ljj

Sakura_ljj (作者)

已解决,在vue3中使用const { t } = useI18n()这种方式引入然后在模板中使用{{ t('mistakes.detailTitle', ['123']) }}这种t方法的方式是没有效果的,需要使用$t方法,然后实现方式与上面一样// 语言文件定义
detailTitle: ({ count }) => 错题集-${count}复习

// 模板中使用
{{ $t('mistakes.detailTitle', { count: 123 }) }}

要回复问题请先登录注册