You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue-i18n读取含非ASCII字符的JSON文件时为何触发插件错误?

Vue I18n读取含非ASCII字符的JSON文件报错解决方案

问题详情

我正按照Vue I18n的TypeScript类型安全方案,从JSON文件读取i18n字符串。现有en-US.json文件:

{ 
  "world": "the world!"
}

Vue应用配置代码如下:

import { createI18n } from 'vue-i18n'
import enUS from '../src/i18n/en-US.json'

// 定义'en-US'作为资源的主类型 schema
type MessageSchema = typeof enUS

const i18n = createI18n<[MessageSchema], 'en-US'>({
  locale: 'en-US',
  messages: {
    'en-US': enUS
  }
})

原本代码运行正常,但在JSON中添加非ASCII字符(比如"world": "the wörld!")时,会触发报错:

[plugin:vite-plugin-vue-i18n] Cannot read properties of undefined (reading 'message')
/home/bernhard/wd/quasar2-project/src/i18n/en-US.json

但直接在.ts文件中定义相同内容的对象,却能正常工作:

const enUS = {
   "world": "the wörld!"
}

解决办法

1. 检查并修正JSON文件编码

这类问题大概率是JSON文件编码不对导致的。用编辑器(比如VS Code)打开en-US.json,将其保存为UTF-8编码(不要带BOM):

  • VS Code可以点击右下角的编码选项,选择"UTF-8"后重新保存文件。

2. 调整vite-plugin-vue-i18n插件配置

在项目的vite.config.ts(如果是Quasar项目则修改quasar.conf.js)中,给vue-i18n插件添加forceStringify配置,强制以字符串方式解析JSON内容:

import { defineConfig } from 'vite'
import vueI18n from '@intlify/vite-plugin-vue-i18n'
import path from 'path'

export default defineConfig({
  plugins: [
    vueI18n({
      include: path.resolve(__dirname, './src/i18n/**'),
      forceStringify: true // 启用该配置避免编码解析问题
    })
  ]
})

3. 验证JSON语法合法性

确保JSON文件没有语法错误,非ASCII字符无需额外转义,直接写入即可(比如"world": "你好世界"是合法的JSON格式)。

4. 临时替代:改用.ts文件存储资源

如果上述方法都无效,可以暂时把JSON内容迁移到.ts文件中,像测试那样直接定义对象,既保留TypeScript类型安全,又能避开JSON编码问题:

// src/i18n/en-US.ts
export default {
  world: "the wörld!"
}

然后在i18n配置中导入这个.ts文件即可。

内容的提问来源于stack exchange,提问作者Boern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:55:18