@xiaonoodles/meetfun-i18n 1.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FIX_WEBPACK_RESOLUTION.md +245 -0
- package/LICENSE +22 -0
- package/MIGRATION_GUIDE.md +253 -0
- package/README.md +482 -0
- package/TROUBLESHOOTING.md +280 -0
- package/VERIFY_FIX.md +272 -0
- package/VUE2_USAGE.md +170 -0
- package/dist/index.d.ts +348 -0
- package/dist/index.esm.js +1167 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +1173 -0
- package/dist/index.js.map +1 -0
- package/dist/vue2/index.cjs +1256 -0
- package/dist/vue2/index.cjs.map +1 -0
- package/dist/vue2/index.d.ts +346 -0
- package/dist/vue2/index.esm.js +1231 -0
- package/dist/vue2/index.esm.js.map +1 -0
- package/package.json +78 -0
- package/vue2/index.d.ts +3 -0
- package/vue2/index.js +3 -0
- package/vue2/index.mjs +4 -0
- package/vue2/package.json +14 -0
- package/vue2.d.ts +3 -0
- package/vue2.mjs +13 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# 故障排除指南
|
|
2
|
+
|
|
3
|
+
## Vue2 项目报错:`export 'createI18n' was not found in 'vue-i18n'`
|
|
4
|
+
|
|
5
|
+
### 问题描述
|
|
6
|
+
|
|
7
|
+
在 Vue2 项目中使用 `meetfun-i18n/vue2` 时,遇到以下错误:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
ERROR in ./node_modules/meetfun-i18n/dist/index.esm.js
|
|
11
|
+
export 'createI18n' (imported as 'createI18n') was not found in 'vue-i18n'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### 原因
|
|
15
|
+
|
|
16
|
+
这个错误说明打包工具(Webpack/uni-app)加载了 Vue3 版本的代码(`dist/index.esm.js`),而不是 Vue2 版本(`dist/vue2/index.esm.js`)。
|
|
17
|
+
|
|
18
|
+
Vue3 的 vue-i18n@9 使用 `createI18n`,而 Vue2 的 vue-i18n@8 使用 `new VueI18n()`,这导致了不兼容。
|
|
19
|
+
|
|
20
|
+
### 解决方案
|
|
21
|
+
|
|
22
|
+
#### 方案 1:使用正确的引入路径(推荐)
|
|
23
|
+
|
|
24
|
+
确保您的引入语句是:
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
// ✅ 正确 - Vue2 项目
|
|
28
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
29
|
+
|
|
30
|
+
// ❌ 错误 - 这会加载 Vue3 版本
|
|
31
|
+
import { createMeetFunI18n } from 'meetfun-i18n'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
#### 方案 2:检查 package.json 中的版本
|
|
35
|
+
|
|
36
|
+
确保安装了正确版本的依赖:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# 检查当前版本
|
|
40
|
+
pnpm list vue vue-i18n
|
|
41
|
+
|
|
42
|
+
# Vue2 项目应该是:
|
|
43
|
+
# vue: ^2.7.x
|
|
44
|
+
# vue-i18n: ^8.x.x
|
|
45
|
+
|
|
46
|
+
# 如果版本不对,重新安装
|
|
47
|
+
pnpm remove vue vue-i18n
|
|
48
|
+
pnpm add vue@^2.7.0 vue-i18n@^8.0.0
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
#### 方案 3:清除缓存并重新安装
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 清除 node_modules
|
|
55
|
+
rm -rf node_modules
|
|
56
|
+
|
|
57
|
+
# 清除锁定文件(根据你的包管理器选择)
|
|
58
|
+
rm package-lock.json # npm
|
|
59
|
+
rm yarn.lock # yarn
|
|
60
|
+
rm pnpm-lock.yaml # pnpm
|
|
61
|
+
|
|
62
|
+
# 重新安装
|
|
63
|
+
pnpm install
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### 方案 4:Webpack 配置别名(适用于 uni-app)
|
|
67
|
+
|
|
68
|
+
如果上述方法都不行,可以在 `vue.config.js` 或 Webpack 配置中添加别名:
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
// vue.config.js
|
|
72
|
+
module.exports = {
|
|
73
|
+
configureWebpack: {
|
|
74
|
+
resolve: {
|
|
75
|
+
alias: {
|
|
76
|
+
'meetfun-i18n/vue2': 'meetfun-i18n/vue2.js'
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 验证是否正确加载
|
|
84
|
+
|
|
85
|
+
创建一个测试文件:
|
|
86
|
+
|
|
87
|
+
```javascript
|
|
88
|
+
// test.js
|
|
89
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
90
|
+
console.log('导入成功:', typeof createMeetFunI18n)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
如果输出 `导入成功: function`,说明加载正确。
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 类型定义找不到
|
|
98
|
+
|
|
99
|
+
### 问题描述
|
|
100
|
+
|
|
101
|
+
TypeScript 项目报错:找不到模块 `meetfun-i18n/vue2` 的类型定义。
|
|
102
|
+
|
|
103
|
+
### 解决方案
|
|
104
|
+
|
|
105
|
+
#### 方案 1:确保安装了最新版本
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
pnpm add meetfun-i18n@latest
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### 方案 2:在 tsconfig.json 中添加类型引用
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"compilerOptions": {
|
|
116
|
+
"types": ["meetfun-i18n/vue2"]
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
#### 方案 3:手动指定类型
|
|
122
|
+
|
|
123
|
+
在文件顶部添加:
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
/// <reference types="meetfun-i18n/vue2" />
|
|
127
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## uni-app 编译报错
|
|
133
|
+
|
|
134
|
+
### 问题描述
|
|
135
|
+
|
|
136
|
+
在 uni-app 项目中编译时报错。
|
|
137
|
+
|
|
138
|
+
### 解决方案
|
|
139
|
+
|
|
140
|
+
#### 方案 1:确保 HBuilderX 或 CLI 版本最新
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# 如果使用 CLI
|
|
144
|
+
npm update -g @vue/cli-service-global
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### 方案 2:检查 manifest.json 配置
|
|
148
|
+
|
|
149
|
+
确保配置了正确的 Vue 版本:
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"vueVersion": "2" // Vue2 项目
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
#### 方案 3:清除编译缓存
|
|
158
|
+
|
|
159
|
+
在 HBuilderX 中:
|
|
160
|
+
1. 运行 -> 清除缓存
|
|
161
|
+
2. 重新编译
|
|
162
|
+
|
|
163
|
+
使用 CLI:
|
|
164
|
+
```bash
|
|
165
|
+
rm -rf unpackage
|
|
166
|
+
npm run dev:mp-weixin # 或其他平台
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## peerDependencies 警告
|
|
172
|
+
|
|
173
|
+
### 问题描述
|
|
174
|
+
|
|
175
|
+
安装时出现 peerDependencies 警告。
|
|
176
|
+
|
|
177
|
+
### 解决方案
|
|
178
|
+
|
|
179
|
+
这是正常的,因为包支持 Vue2 和 Vue3。确保您安装了正确版本的依赖即可:
|
|
180
|
+
|
|
181
|
+
**Vue2 项目:**
|
|
182
|
+
```bash
|
|
183
|
+
pnpm add vue@^2.7.0 vue-i18n@^8.0.0
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Vue3 项目:**
|
|
187
|
+
```bash
|
|
188
|
+
pnpm add vue@^3.0.0 vue-i18n@^9.0.0
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 运行时报错:`uni is not defined`
|
|
194
|
+
|
|
195
|
+
### 问题描述
|
|
196
|
+
|
|
197
|
+
在非 uni-app 项目中使用报错。
|
|
198
|
+
|
|
199
|
+
### 解决方案
|
|
200
|
+
|
|
201
|
+
本库依赖 uni-app 的 `uni` 全局对象,仅适用于 uni-app 项目。
|
|
202
|
+
|
|
203
|
+
如果您需要在普通 Vue 项目中使用,可以:
|
|
204
|
+
|
|
205
|
+
1. 使用原生的 vue-i18n
|
|
206
|
+
2. 或者 mock `uni` 对象(不推荐)
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 构建产物体积过大
|
|
211
|
+
|
|
212
|
+
### 问题描述
|
|
213
|
+
|
|
214
|
+
打包后体积较大。
|
|
215
|
+
|
|
216
|
+
### 解决方案
|
|
217
|
+
|
|
218
|
+
#### 方案 1:启用 Tree Shaking
|
|
219
|
+
|
|
220
|
+
确保使用 ES Module 导入:
|
|
221
|
+
|
|
222
|
+
```javascript
|
|
223
|
+
// ✅ 好 - 支持 Tree Shaking
|
|
224
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
225
|
+
|
|
226
|
+
// ❌ 不好
|
|
227
|
+
const { createMeetFunI18n } = require('meetfun-i18n/vue2')
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### 方案 2:只导入需要的功能
|
|
231
|
+
|
|
232
|
+
```javascript
|
|
233
|
+
import { createMeetFunI18n, LANGUAGE_OPTIONS_CONFIGURATION } from 'meetfun-i18n/vue2'
|
|
234
|
+
// 而不是:import * as i18n from 'meetfun-i18n/vue2'
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 其他常见问题
|
|
240
|
+
|
|
241
|
+
### Q: 可以在 Vue2 和 Vue3 混合项目中使用吗?
|
|
242
|
+
|
|
243
|
+
A: 不建议。一个项目应该只使用一个版本的 Vue 和对应的 meetfun-i18n 版本。
|
|
244
|
+
|
|
245
|
+
### Q: 升级到新版本后出现问题怎么办?
|
|
246
|
+
|
|
247
|
+
A:
|
|
248
|
+
1. 查看 [CHANGELOG.md](./CHANGELOG.md) 了解破坏性更改
|
|
249
|
+
2. 清除缓存和 node_modules
|
|
250
|
+
3. 重新安装依赖
|
|
251
|
+
|
|
252
|
+
### Q: 如何确认使用的是哪个版本?
|
|
253
|
+
|
|
254
|
+
A: 在代码中添加调试信息:
|
|
255
|
+
|
|
256
|
+
```javascript
|
|
257
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
258
|
+
console.log('meetfun-i18n version:', createMeetFunI18n.toString())
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## 获取帮助
|
|
264
|
+
|
|
265
|
+
如果以上方法都无法解决问题,请:
|
|
266
|
+
|
|
267
|
+
1. 检查 [GitHub Issues](https://github.com/meetfun/meetfun-i18n/issues)
|
|
268
|
+
2. 提供以下信息创建新 Issue:
|
|
269
|
+
- Vue 版本
|
|
270
|
+
- vue-i18n 版本
|
|
271
|
+
- meetfun-i18n 版本
|
|
272
|
+
- 完整的错误信息
|
|
273
|
+
- 最小复现代码
|
|
274
|
+
|
|
275
|
+
## 相关文档
|
|
276
|
+
|
|
277
|
+
- [README.md](./README.md) - 完整使用文档
|
|
278
|
+
- [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 使用指南
|
|
279
|
+
- [MIGRATION_GUIDE.md](./MIGRATION_GUIDE.md) - 迁移指南
|
|
280
|
+
|
package/VERIFY_FIX.md
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# 修复验证指南
|
|
2
|
+
|
|
3
|
+
## 📋 问题总结
|
|
4
|
+
|
|
5
|
+
**错误信息:**
|
|
6
|
+
```
|
|
7
|
+
ERROR in ./node_modules/meetfun-i18n/dist/index.esm.js 1029:20-30
|
|
8
|
+
export 'createI18n' (imported as 'createI18n') was not found in 'vue-i18n'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**根本原因:**
|
|
12
|
+
Webpack 5 在处理 `import from 'meetfun-i18n/vue2'` 时,没有正确解析到 Vue2 版本的代码,而是加载了 Vue3 版本(`dist/index.esm.js`)。Vue3 版本使用 `createI18n`(vue-i18n@9),但您的项目安装的是 vue-i18n@8(只有 `default` 导出),因此报错。
|
|
13
|
+
|
|
14
|
+
## ✅ 修复方案
|
|
15
|
+
|
|
16
|
+
创建了物理的 `vue2/` 目录,确保 Webpack 能够正确解析子路径导入。
|
|
17
|
+
|
|
18
|
+
## 🔍 验证步骤
|
|
19
|
+
|
|
20
|
+
### 步骤 1: 重新发布包(维护者)
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 确保已构建
|
|
24
|
+
pnpm build
|
|
25
|
+
|
|
26
|
+
# 发布新版本 1.2.1
|
|
27
|
+
npm publish
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 步骤 2: 在您的项目中更新(用户)
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 方式 1: 更新到最新版本
|
|
34
|
+
pnpm update meetfun-i18n
|
|
35
|
+
|
|
36
|
+
# 方式 2: 指定版本更新
|
|
37
|
+
pnpm add meetfun-i18n@1.2.1
|
|
38
|
+
|
|
39
|
+
# 方式 3: 强制重新安装
|
|
40
|
+
pnpm remove meetfun-i18n
|
|
41
|
+
pnpm add meetfun-i18n@latest
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 步骤 3: 验证文件结构
|
|
45
|
+
|
|
46
|
+
更新后,检查 `node_modules/meetfun-i18n/` 是否包含:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
ls node_modules/meetfun-i18n/vue2/
|
|
50
|
+
|
|
51
|
+
# 应该看到以下文件:
|
|
52
|
+
# ✅ package.json
|
|
53
|
+
# ✅ index.js
|
|
54
|
+
# ✅ index.mjs
|
|
55
|
+
# ✅ index.d.ts
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
查看 `vue2/package.json` 内容:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cat node_modules/meetfun-i18n/vue2/package.json
|
|
62
|
+
|
|
63
|
+
# 应该显示:
|
|
64
|
+
{
|
|
65
|
+
"main": "../dist/vue2/index.js",
|
|
66
|
+
"module": "../dist/vue2/index.esm.js",
|
|
67
|
+
"types": "../dist/vue2/index.d.ts"
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 步骤 4: 清除缓存
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# 清除 node_modules(确保干净安装)
|
|
75
|
+
rm -rf node_modules
|
|
76
|
+
rm pnpm-lock.yaml
|
|
77
|
+
|
|
78
|
+
# 重新安装
|
|
79
|
+
pnpm install
|
|
80
|
+
|
|
81
|
+
# 清除构建缓存
|
|
82
|
+
rm -rf unpackage # uni-app 项目
|
|
83
|
+
rm -rf dist # 如果有
|
|
84
|
+
rm -rf .cache # Webpack 缓存
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 步骤 5: 验证代码
|
|
88
|
+
|
|
89
|
+
在您的 `src/locales/index.js` 中确认引入语句:
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
// ✅ 正确的引入方式
|
|
93
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
94
|
+
|
|
95
|
+
// ❌ 错误 - 这会加载 Vue3 版本
|
|
96
|
+
// import { createMeetFunI18n } from 'meetfun-i18n'
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 步骤 6: 添加调试代码
|
|
100
|
+
|
|
101
|
+
临时添加以下代码来验证加载的版本:
|
|
102
|
+
|
|
103
|
+
```javascript
|
|
104
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
105
|
+
|
|
106
|
+
console.log('✅ 导入成功')
|
|
107
|
+
console.log('createMeetFunI18n:', typeof createMeetFunI18n)
|
|
108
|
+
|
|
109
|
+
// 创建一个测试实例
|
|
110
|
+
const testInstance = createMeetFunI18n(
|
|
111
|
+
{ 'zh-Hans': {} },
|
|
112
|
+
{
|
|
113
|
+
queryLangDictHotData: async () => ({ data: {} }),
|
|
114
|
+
queryLangDictColdData: async () => ({ data: {} })
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
const i18n = testInstance.getI18n()
|
|
119
|
+
console.log('i18n 实例类型:', i18n.constructor.name)
|
|
120
|
+
console.log('是否有 t 方法:', typeof i18n.t)
|
|
121
|
+
|
|
122
|
+
// 期望输出:
|
|
123
|
+
// ✅ 导入成功
|
|
124
|
+
// createMeetFunI18n: function
|
|
125
|
+
// i18n 实例类型: VueI18n
|
|
126
|
+
// 是否有 t 方法: function
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 步骤 7: 重新编译运行
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# 重新运行开发服务器
|
|
133
|
+
npm run dev
|
|
134
|
+
|
|
135
|
+
# 或针对特定平台
|
|
136
|
+
npm run dev:mp-weixin
|
|
137
|
+
npm run dev:h5
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 🎯 预期结果
|
|
141
|
+
|
|
142
|
+
### 成功标志
|
|
143
|
+
|
|
144
|
+
1. ✅ 不再出现 `export 'createI18n' was not found` 错误
|
|
145
|
+
2. ✅ 控制台输出显示 `i18n 实例类型: VueI18n`
|
|
146
|
+
3. ✅ 项目正常编译和运行
|
|
147
|
+
4. ✅ 翻译功能正常工作
|
|
148
|
+
|
|
149
|
+
### 如果还是失败
|
|
150
|
+
|
|
151
|
+
请检查以下内容:
|
|
152
|
+
|
|
153
|
+
#### 1. 确认 vue-i18n 版本
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
pnpm list vue-i18n
|
|
157
|
+
|
|
158
|
+
# Vue2 项目应该显示:
|
|
159
|
+
# vue-i18n 8.x.x
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
如果不是 8.x.x,重新安装:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
pnpm remove vue-i18n
|
|
166
|
+
pnpm add vue-i18n@^8.0.0
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### 2. 检查引入路径
|
|
170
|
+
|
|
171
|
+
确保所有文件都使用 `/vue2`:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# 搜索项目中的所有引入
|
|
175
|
+
grep -r "from 'meetfun-i18n'" src/
|
|
176
|
+
|
|
177
|
+
# 应该都是:
|
|
178
|
+
# from 'meetfun-i18n/vue2'
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### 3. 检查 Webpack 配置
|
|
182
|
+
|
|
183
|
+
如果项目有自定义的 `webpack.config.js` 或 `vue.config.js`,确保没有配置冲突:
|
|
184
|
+
|
|
185
|
+
```javascript
|
|
186
|
+
// vue.config.js
|
|
187
|
+
module.exports = {
|
|
188
|
+
configureWebpack: {
|
|
189
|
+
resolve: {
|
|
190
|
+
// 确保这里没有关于 meetfun-i18n 的别名配置
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
#### 4. 尝试直接路径
|
|
197
|
+
|
|
198
|
+
作为临时测试,可以尝试直接引入:
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
// 测试:直接引入 dist/vue2
|
|
202
|
+
import { createMeetFunI18n } from 'meetfun-i18n/dist/vue2/index.esm.js'
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
如果这样能工作,说明是路径解析问题,请提供您的 Webpack 配置。
|
|
206
|
+
|
|
207
|
+
## 📊 对比表
|
|
208
|
+
|
|
209
|
+
| 检查项 | Vue3 版本(错误) | Vue2 版本(正确) |
|
|
210
|
+
|--------|------------------|-------------------|
|
|
211
|
+
| **引入路径** | `meetfun-i18n` | `meetfun-i18n/vue2` |
|
|
212
|
+
| **加载文件** | `dist/index.esm.js` | `dist/vue2/index.esm.js` |
|
|
213
|
+
| **i18n 创建** | `createI18n()` | `new VueI18n()` |
|
|
214
|
+
| **实例类型** | `Composer` | `VueI18n` |
|
|
215
|
+
| **vue-i18n 版本** | 9.x | 8.x |
|
|
216
|
+
|
|
217
|
+
## 🆘 获取帮助
|
|
218
|
+
|
|
219
|
+
如果以上步骤都完成了还是不行,请提供以下信息:
|
|
220
|
+
|
|
221
|
+
1. **包版本信息:**
|
|
222
|
+
```bash
|
|
223
|
+
pnpm list meetfun-i18n vue vue-i18n
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
2. **文件是否存在:**
|
|
227
|
+
```bash
|
|
228
|
+
ls -la node_modules/meetfun-i18n/vue2/
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
3. **引入代码:**
|
|
232
|
+
```javascript
|
|
233
|
+
// 粘贴您的 src/locales/index.js 的引入部分
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
4. **完整错误信息:**
|
|
237
|
+
```
|
|
238
|
+
// 粘贴完整的错误堆栈
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
5. **项目环境:**
|
|
242
|
+
- uni-app 版本
|
|
243
|
+
- 使用的打包工具(HBuilderX / CLI)
|
|
244
|
+
- Node.js 版本
|
|
245
|
+
|
|
246
|
+
## 📚 相关文档
|
|
247
|
+
|
|
248
|
+
- [FIX_WEBPACK_RESOLUTION.md](./FIX_WEBPACK_RESOLUTION.md) - 技术细节
|
|
249
|
+
- [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) - 故障排除
|
|
250
|
+
- [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 使用指南
|
|
251
|
+
|
|
252
|
+
## ✨ 成功案例
|
|
253
|
+
|
|
254
|
+
更新到 1.2.1 后,以下场景都应该正常工作:
|
|
255
|
+
|
|
256
|
+
```javascript
|
|
257
|
+
// ✅ ES Module 导入
|
|
258
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
259
|
+
|
|
260
|
+
// ✅ CommonJS 导入
|
|
261
|
+
const { createMeetFunI18n } = require('meetfun-i18n/vue2')
|
|
262
|
+
|
|
263
|
+
// ✅ TypeScript 类型
|
|
264
|
+
import type { I18nConfig, ApiConfig } from 'meetfun-i18n/vue2'
|
|
265
|
+
|
|
266
|
+
// ✅ 动态导入
|
|
267
|
+
const module = await import('meetfun-i18n/vue2')
|
|
268
|
+
|
|
269
|
+
// ✅ 默认导出
|
|
270
|
+
import createMeetFunI18n from 'meetfun-i18n/vue2'
|
|
271
|
+
```
|
|
272
|
+
|
package/VUE2_USAGE.md
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Vue2 使用指南
|
|
2
|
+
|
|
3
|
+
本库现在同时支持 Vue2 + vue-i18n@8 和 Vue3 + vue-i18n@9。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 使用 pnpm
|
|
9
|
+
pnpm add meetfun-i18n
|
|
10
|
+
|
|
11
|
+
# Vue2 项目还需要安装
|
|
12
|
+
pnpm add vue@^2.7.0 vue-i18n@^8.0.0
|
|
13
|
+
|
|
14
|
+
# Vue3 项目需要安装
|
|
15
|
+
pnpm add vue@^3.0.0 vue-i18n@^9.0.0
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Vue2 使用方式
|
|
19
|
+
|
|
20
|
+
### 1. 引入方式
|
|
21
|
+
|
|
22
|
+
Vue2 项目需要从 `meetfun-i18n/vue2` 引入:
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
// Vue2 项目
|
|
26
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. 完整示例
|
|
30
|
+
|
|
31
|
+
```javascript
|
|
32
|
+
// main.js
|
|
33
|
+
import Vue from 'vue'
|
|
34
|
+
import App from './App.vue'
|
|
35
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
36
|
+
|
|
37
|
+
// 引入本地语言包
|
|
38
|
+
import zhHans from './locales/zh-Hans.json'
|
|
39
|
+
import zhHant from './locales/zh-Hant.json'
|
|
40
|
+
import en from './locales/en.json'
|
|
41
|
+
|
|
42
|
+
// 引入 API 函数
|
|
43
|
+
import { queryLangDictHotData, queryLangDictColdData } from './api/translate'
|
|
44
|
+
|
|
45
|
+
// 创建基础语言包
|
|
46
|
+
const baseMessages = {
|
|
47
|
+
'zh-Hans': zhHans,
|
|
48
|
+
'zh-Hant': zhHant,
|
|
49
|
+
en: en,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 配置 API
|
|
53
|
+
const apiConfig = {
|
|
54
|
+
queryLangDictHotData,
|
|
55
|
+
queryLangDictColdData,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 创建 i18n 实例
|
|
59
|
+
const i18nInstance = createMeetFunI18n(baseMessages, apiConfig, {
|
|
60
|
+
defaultLocale: 'zh-Hans',
|
|
61
|
+
defaultLangDictDomainCode: 'TALENTS',
|
|
62
|
+
systemCode: 'TALENTS_STUDENT',
|
|
63
|
+
debug: true,
|
|
64
|
+
onLocaleChanged: (payload) => {
|
|
65
|
+
console.log('语言已切换:', payload.targetLocale)
|
|
66
|
+
}
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
// 安装到 Vue
|
|
70
|
+
Vue.use(i18nInstance.getI18n())
|
|
71
|
+
|
|
72
|
+
// 挂载到 Vue 原型(可选,方便全局访问)
|
|
73
|
+
Vue.prototype.$i18nInstance = i18nInstance
|
|
74
|
+
|
|
75
|
+
new Vue({
|
|
76
|
+
i18n: i18nInstance.getI18n(),
|
|
77
|
+
render: h => h(App)
|
|
78
|
+
}).$mount('#app')
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 3. 在组件中使用
|
|
82
|
+
|
|
83
|
+
```vue
|
|
84
|
+
<template>
|
|
85
|
+
<view>
|
|
86
|
+
<!-- 使用 vue-i18n 的 $t -->
|
|
87
|
+
<text>{{ $t('welcomeMessage') }}</text>
|
|
88
|
+
|
|
89
|
+
<!-- 使用实例的 $t -->
|
|
90
|
+
<text>{{ i18nInstance.$t('welcomeMessage') }}</text>
|
|
91
|
+
|
|
92
|
+
<!-- 切换语言 -->
|
|
93
|
+
<button @click="switchLanguage">切换语言</button>
|
|
94
|
+
</view>
|
|
95
|
+
</template>
|
|
96
|
+
|
|
97
|
+
<script>
|
|
98
|
+
export default {
|
|
99
|
+
computed: {
|
|
100
|
+
i18nInstance() {
|
|
101
|
+
return this.$i18nInstance
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
methods: {
|
|
105
|
+
switchLanguage() {
|
|
106
|
+
this.$i18nInstance.switchLocale('en')
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
</script>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 4. API 函数示例
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
116
|
+
// api/translate.js
|
|
117
|
+
import request from './request'
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* 查询语言包热数据
|
|
121
|
+
*/
|
|
122
|
+
export function queryLangDictHotData({ systemCode }) {
|
|
123
|
+
return request.post('/api/lang-dict/hot', { systemCode })
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* 查询语言包冷数据
|
|
128
|
+
*/
|
|
129
|
+
export function queryLangDictColdData({ langDictColdDataCmdList }) {
|
|
130
|
+
return request.post('/api/lang-dict/cold', { langDictColdDataCmdList })
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Vue3 使用方式
|
|
135
|
+
|
|
136
|
+
Vue3 项目从主入口引入即可:
|
|
137
|
+
|
|
138
|
+
```javascript
|
|
139
|
+
// Vue3 项目
|
|
140
|
+
import { createMeetFunI18n } from 'meetfun-i18n'
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
其他使用方式与 Vue2 相同。
|
|
144
|
+
|
|
145
|
+
## 主要 API
|
|
146
|
+
|
|
147
|
+
两个版本的 API 完全一致:
|
|
148
|
+
|
|
149
|
+
- `$t(key, params?)` - 翻译函数
|
|
150
|
+
- `switchLocale(locale)` - 切换语言
|
|
151
|
+
- `getCurrentLocale()` - 获取当前语言
|
|
152
|
+
- `fetchLangDictHotData()` - 获取热数据
|
|
153
|
+
- `updateI18nMessages(data, saveToCache?)` - 更新语言包
|
|
154
|
+
- `createI18nProxy(data, config?)` - 创建国际化代理对象
|
|
155
|
+
- `getI18n()` - 获取 i18n 实例
|
|
156
|
+
|
|
157
|
+
更多 API 请参考 [USAGE_EXAMPLE.md](./USAGE_EXAMPLE.md)
|
|
158
|
+
|
|
159
|
+
## 版本要求
|
|
160
|
+
|
|
161
|
+
- **Vue2**: Vue 2.7+ 和 vue-i18n 8.x
|
|
162
|
+
- **Vue3**: Vue 3.x 和 vue-i18n 9.x
|
|
163
|
+
|
|
164
|
+
## 注意事项
|
|
165
|
+
|
|
166
|
+
1. Vue2 和 Vue3 项目需要使用不同的引入路径
|
|
167
|
+
2. 确保安装了正确版本的 `vue` 和 `vue-i18n`
|
|
168
|
+
3. API 函数的实现需要根据项目的实际情况调整
|
|
169
|
+
4. Vue2 版本使用的是 vue-i18n 8.x 的旧版 API(legacy mode)
|
|
170
|
+
|