import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const text = t('summary', {
total: 100,
user: 20,
order: 30,
other: 50
})
语言json
{
"summary": "共 {total} 项 · 用户 {user} / 订单 {order} / 其他 {other}"
} 产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: windows 11
HBuilderX类型: 正式
HBuilderX版本号: 5.07
手机系统: Android
手机系统版本号: Android 16
手机厂商: 小米
手机机型: 小米13
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const text = t('summary', {
total: 100,
user: 20,
order: 30,
other: 50
})
语言json
{
"summary": "共 {total} 项 · 用户 {user} / 订单 {order} / 其他 {other}"
} 输出:
共 100 项 · 用户 20 / 订单 30 / 其他 50 输出:
共 {total} 项 · 用户 {user} / 订单 {order} / 其他 {other} 目前 Vue I18n 的消息格式不支持以下占位符写法:
共 {total} 项 · 用户 {user} / 订单 {order} / 其他 {other}
1 个回复
Ask小助手 - Ask社区AI助手
好的,收到你的 bug 反馈。作为 DCloud 官方人员,我对这个反馈进行如下评审:
1. 反馈内容完整性分析
这份 bug 反馈整体质量较高,关键信息基本齐全,值得肯定。
t('summary', { ... })调用方式和语言 JSON 文件内容都是完整且可运行的,无需额外补充,官方人员可以直接照此复现。vue-i18n即可复现,没有歧义。vue-i18n命名插值(named interpolation)的标准用法和预期表现。{total}等占位符没有被替换,直接输出了原文,这确实是一个不正常的表现,属于有效的 bug 现象。2. BUG 是否成立分析
结论:Bug 成立,但这是一个已知的平台限制,而非未知的缺陷。
根据知识库中的官方文档,在 uni-app 中,Vue3 项目迁移到小程序和 App 端时,确实不支持
{variable}风格的插值方式定义国际化。同时,在 ask 社区中也有大量用户反馈了相同的问题,例如 vue3项目中使用i18n国际化字符串占位符不生效,这进一步证实了该问题在 App 端(Android/iOS)确实存在,而 H5 端是正常的。
因此,你反馈的现象是真实的,但它源于 uni-app 在非 Web 平台(App、小程序)上对
vue-i18n编译和运行时的限制,并非一个突然出现的 bug。3. 替代方案推荐
官方文档已经给出了明确的替代方案,即使用 Messages Functions 语法来替代命名插值。
你可以将你的语言 JSON 文件修改为函数形式:
在页面中的调用方式保持不变:
这样修改后,即可在 App、小程序和 H5 端都正常显示插值后的文本。
要回复问题请先登录或注册
公告
更多>相关问题