@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,245 @@
|
|
|
1
|
+
# Webpack 5 路径解析修复说明
|
|
2
|
+
|
|
3
|
+
## 问题根源
|
|
4
|
+
|
|
5
|
+
Webpack 5 在处理 npm 包的子路径导入时,默认不会完全遵循 `package.json` 的 `exports` 字段。当使用 `import from 'meetfun-i18n/vue2'` 时,Webpack 会尝试查找物理路径 `node_modules/meetfun-i18n/vue2`。
|
|
6
|
+
|
|
7
|
+
## 解决方案
|
|
8
|
+
|
|
9
|
+
创建了一个真实的 `vue2/` 目录,其中包含:
|
|
10
|
+
|
|
11
|
+
### 目录结构
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
meetfun-i18n/
|
|
15
|
+
├── dist/
|
|
16
|
+
│ ├── index.js # Vue3 版本
|
|
17
|
+
│ ├── index.esm.js
|
|
18
|
+
│ └── vue2/
|
|
19
|
+
│ ├── index.js # Vue2 实际代码
|
|
20
|
+
│ └── index.esm.js
|
|
21
|
+
├── vue2/ # ← 新增物理目录
|
|
22
|
+
│ ├── package.json # 指向 dist/vue2
|
|
23
|
+
│ ├── index.js # CommonJS 入口
|
|
24
|
+
│ ├── index.mjs # ES Module 入口
|
|
25
|
+
│ └── index.d.ts # TypeScript 类型
|
|
26
|
+
└── package.json
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### vue2/package.json
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"main": "../dist/vue2/index.js",
|
|
34
|
+
"module": "../dist/vue2/index.esm.js",
|
|
35
|
+
"types": "../dist/vue2/index.d.ts"
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
这个文件告诉 Webpack:
|
|
40
|
+
- CommonJS (`require`) → 使用 `../dist/vue2/index.js`
|
|
41
|
+
- ES Module (`import`) → 使用 `../dist/vue2/index.esm.js`
|
|
42
|
+
- TypeScript → 使用 `../dist/vue2/index.d.ts`
|
|
43
|
+
|
|
44
|
+
### vue2/index.js (CommonJS 入口)
|
|
45
|
+
|
|
46
|
+
```javascript
|
|
47
|
+
module.exports = require('../dist/vue2/index.js')
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### vue2/index.mjs (ES Module 入口)
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
export * from '../dist/vue2/index.esm.js'
|
|
54
|
+
export { default } from '../dist/vue2/index.esm.js'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 工作原理
|
|
58
|
+
|
|
59
|
+
现在当您使用:
|
|
60
|
+
```javascript
|
|
61
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Webpack 会:
|
|
65
|
+
1. 找到 `node_modules/meetfun-i18n/vue2` 目录
|
|
66
|
+
2. 读取 `vue2/package.json`
|
|
67
|
+
3. 根据模块类型选择:
|
|
68
|
+
- ES Module → `vue2/index.mjs` → `dist/vue2/index.esm.js`
|
|
69
|
+
- CommonJS → `vue2/index.js` → `dist/vue2/index.js`
|
|
70
|
+
4. 最终加载正确的 Vue2 版本代码
|
|
71
|
+
|
|
72
|
+
## 多层保护
|
|
73
|
+
|
|
74
|
+
我们提供了多种方式确保兼容性:
|
|
75
|
+
|
|
76
|
+
### 1. 根目录入口文件
|
|
77
|
+
```
|
|
78
|
+
vue2.js # CommonJS
|
|
79
|
+
vue2.mjs # ES Module
|
|
80
|
+
vue2.d.ts # TypeScript
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 2. vue2 目录
|
|
84
|
+
```
|
|
85
|
+
vue2/
|
|
86
|
+
├── package.json
|
|
87
|
+
├── index.js
|
|
88
|
+
├── index.mjs
|
|
89
|
+
└── index.d.ts
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 3. package.json exports
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"exports": {
|
|
96
|
+
"./vue2": {
|
|
97
|
+
"types": "./vue2.d.ts",
|
|
98
|
+
"import": "./vue2.mjs",
|
|
99
|
+
"require": "./vue2.js"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
无论打包工具采用哪种解析策略,都能正确找到 Vue2 版本的代码。
|
|
106
|
+
|
|
107
|
+
## 验证方法
|
|
108
|
+
|
|
109
|
+
### 1. 检查文件是否存在
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
ls node_modules/meetfun-i18n/vue2/
|
|
113
|
+
# 应该看到:
|
|
114
|
+
# index.js index.mjs index.d.ts package.json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 2. 检查是否加载正确
|
|
118
|
+
|
|
119
|
+
在您的代码中添加:
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
123
|
+
|
|
124
|
+
// 创建一个测试实例
|
|
125
|
+
const i18n = createMeetFunI18n({}, {
|
|
126
|
+
queryLangDictHotData: () => {},
|
|
127
|
+
queryLangDictColdData: () => {}
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
const instance = i18n.getI18n()
|
|
131
|
+
|
|
132
|
+
// 检查实例类型
|
|
133
|
+
console.log('i18n 类型:', instance.constructor.name)
|
|
134
|
+
// Vue2 应该输出: VueI18n
|
|
135
|
+
// Vue3 会输出: Composer
|
|
136
|
+
|
|
137
|
+
console.log('是否有 t 方法:', typeof instance.t)
|
|
138
|
+
// Vue2 应该输出: function
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 3. 清除缓存后重新安装
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# 删除 node_modules
|
|
145
|
+
rm -rf node_modules
|
|
146
|
+
|
|
147
|
+
# 删除锁文件
|
|
148
|
+
rm pnpm-lock.yaml
|
|
149
|
+
|
|
150
|
+
# 重新安装
|
|
151
|
+
pnpm install
|
|
152
|
+
|
|
153
|
+
# 清除构建缓存
|
|
154
|
+
rm -rf unpackage # uni-app
|
|
155
|
+
rm -rf .cache # Webpack
|
|
156
|
+
|
|
157
|
+
# 重新运行
|
|
158
|
+
npm run dev
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 常见问题
|
|
162
|
+
|
|
163
|
+
### Q: 为什么需要这么多入口文件?
|
|
164
|
+
|
|
165
|
+
A: 不同的打包工具和配置有不同的模块解析策略:
|
|
166
|
+
- **现代打包工具**(支持 exports)→ 使用 package.json exports
|
|
167
|
+
- **Webpack 5**(部分支持)→ 查找物理目录 vue2/
|
|
168
|
+
- **老版本工具** → 使用根目录的 vue2.js/vue2.mjs
|
|
169
|
+
|
|
170
|
+
这种多层设计确保最大兼容性。
|
|
171
|
+
|
|
172
|
+
### Q: 如果还是报错怎么办?
|
|
173
|
+
|
|
174
|
+
A: 尝试以下步骤:
|
|
175
|
+
|
|
176
|
+
1. **完全重新安装**
|
|
177
|
+
```bash
|
|
178
|
+
rm -rf node_modules pnpm-lock.yaml
|
|
179
|
+
pnpm install
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
2. **清除所有缓存**
|
|
183
|
+
```bash
|
|
184
|
+
rm -rf unpackage .cache dist
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
3. **检查 vue-i18n 版本**
|
|
188
|
+
```bash
|
|
189
|
+
pnpm list vue-i18n
|
|
190
|
+
# Vue2 项目应该是 8.x.x
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
4. **强制安装正确版本**
|
|
194
|
+
```bash
|
|
195
|
+
pnpm add vue-i18n@^8.0.0 --force
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Q: TypeScript 提示找不到模块?
|
|
199
|
+
|
|
200
|
+
A: 在 `tsconfig.json` 中添加:
|
|
201
|
+
|
|
202
|
+
```json
|
|
203
|
+
{
|
|
204
|
+
"compilerOptions": {
|
|
205
|
+
"moduleResolution": "node",
|
|
206
|
+
"resolveJsonModule": true,
|
|
207
|
+
"esModuleInterop": true
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## 更新步骤
|
|
213
|
+
|
|
214
|
+
用户需要更新到最新版本:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# 更新包
|
|
218
|
+
pnpm update meetfun-i18n
|
|
219
|
+
|
|
220
|
+
# 或指定版本
|
|
221
|
+
pnpm add meetfun-i18n@1.2.1
|
|
222
|
+
|
|
223
|
+
# 验证安装
|
|
224
|
+
ls node_modules/meetfun-i18n/vue2/
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## 测试结果
|
|
228
|
+
|
|
229
|
+
更新后,以下导入应该都能正常工作:
|
|
230
|
+
|
|
231
|
+
```javascript
|
|
232
|
+
// ✅ 所有这些方式都应该能工作
|
|
233
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
234
|
+
const { createMeetFunI18n } = require('meetfun-i18n/vue2')
|
|
235
|
+
|
|
236
|
+
// ✅ TypeScript 也能正确识别类型
|
|
237
|
+
import type { I18nConfig } from 'meetfun-i18n/vue2'
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## 相关文档
|
|
241
|
+
|
|
242
|
+
- [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) - 故障排除完整指南
|
|
243
|
+
- [TEST_IMPORT.md](./TEST_IMPORT.md) - 导入测试说明
|
|
244
|
+
- [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 使用指南
|
|
245
|
+
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 meetfun
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# Vue2/Vue3 迁移指南
|
|
2
|
+
|
|
3
|
+
本文档帮助您在 Vue2 和 Vue3 项目之间迁移使用 meetfun-i18n。
|
|
4
|
+
|
|
5
|
+
## 快速对比
|
|
6
|
+
|
|
7
|
+
| 特性 | Vue2 | Vue3 |
|
|
8
|
+
|------|------|------|
|
|
9
|
+
| **引入方式** | `import { createMeetFunI18n } from 'meetfun-i18n/vue2'` | `import { createMeetFunI18n } from 'meetfun-i18n'` |
|
|
10
|
+
| **Vue 版本** | Vue 2.7+ | Vue 3.x |
|
|
11
|
+
| **vue-i18n 版本** | 8.x | 9.x |
|
|
12
|
+
| **安装方式** | `Vue.use(i18n)` | `app.use(i18n)` |
|
|
13
|
+
| **API 使用** | 完全相同 ✅ | 完全相同 ✅ |
|
|
14
|
+
|
|
15
|
+
## Vue2 项目示例
|
|
16
|
+
|
|
17
|
+
### 1. 安装依赖
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pnpm add meetfun-i18n vue@^2.7.0 vue-i18n@^8.0.0
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. 初始化
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
// src/locales/index.js
|
|
27
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
28
|
+
import zhHans from './zh-Hans.json'
|
|
29
|
+
import en from './en.json'
|
|
30
|
+
import { queryLangDictHotData, queryLangDictColdData } from '@/api/translate'
|
|
31
|
+
|
|
32
|
+
const baseMessages = {
|
|
33
|
+
'zh-Hans': zhHans,
|
|
34
|
+
en: en,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const apiConfig = {
|
|
38
|
+
queryLangDictHotData,
|
|
39
|
+
queryLangDictColdData,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default createMeetFunI18n(baseMessages, apiConfig, {
|
|
43
|
+
defaultLocale: 'zh-Hans',
|
|
44
|
+
systemCode: 'YOUR_SYSTEM_CODE',
|
|
45
|
+
})
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 3. 在 main.js 中安装
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
// main.js
|
|
52
|
+
import Vue from 'vue'
|
|
53
|
+
import App from './App.vue'
|
|
54
|
+
import i18nInstance from './locales'
|
|
55
|
+
|
|
56
|
+
// 安装 vue-i18n
|
|
57
|
+
Vue.use(i18nInstance.getI18n())
|
|
58
|
+
|
|
59
|
+
// 可选:挂载到原型
|
|
60
|
+
Vue.prototype.$i18nInstance = i18nInstance
|
|
61
|
+
|
|
62
|
+
new Vue({
|
|
63
|
+
i18n: i18nInstance.getI18n(),
|
|
64
|
+
render: h => h(App)
|
|
65
|
+
}).$mount('#app')
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 4. 在组件中使用
|
|
69
|
+
|
|
70
|
+
```vue
|
|
71
|
+
<template>
|
|
72
|
+
<view>
|
|
73
|
+
<text>{{ $t('welcomeMessage') }}</text>
|
|
74
|
+
<button @click="changeLanguage">切换语言</button>
|
|
75
|
+
</view>
|
|
76
|
+
</template>
|
|
77
|
+
|
|
78
|
+
<script>
|
|
79
|
+
export default {
|
|
80
|
+
methods: {
|
|
81
|
+
changeLanguage() {
|
|
82
|
+
this.$i18nInstance.switchLocale('en')
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
</script>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Vue3 项目示例
|
|
90
|
+
|
|
91
|
+
### 1. 安装依赖
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pnpm add meetfun-i18n vue@^3.0.0 vue-i18n@^9.0.0
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 2. 初始化
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
// src/locales/index.ts
|
|
101
|
+
import { createMeetFunI18n } from 'meetfun-i18n'
|
|
102
|
+
import zhHans from './zh-Hans.json'
|
|
103
|
+
import en from './en.json'
|
|
104
|
+
import { queryLangDictHotData, queryLangDictColdData } from '@/api/translate'
|
|
105
|
+
|
|
106
|
+
const baseMessages = {
|
|
107
|
+
'zh-Hans': zhHans,
|
|
108
|
+
en: en,
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const apiConfig = {
|
|
112
|
+
queryLangDictHotData,
|
|
113
|
+
queryLangDictColdData,
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export default createMeetFunI18n(baseMessages, apiConfig, {
|
|
117
|
+
defaultLocale: 'zh-Hans',
|
|
118
|
+
systemCode: 'YOUR_SYSTEM_CODE',
|
|
119
|
+
})
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 3. 在 main.ts 中安装
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// main.ts
|
|
126
|
+
import { createSSRApp } from 'vue'
|
|
127
|
+
import App from './App.vue'
|
|
128
|
+
import i18nInstance from './locales'
|
|
129
|
+
|
|
130
|
+
export function createApp() {
|
|
131
|
+
const app = createSSRApp(App)
|
|
132
|
+
|
|
133
|
+
// 安装 vue-i18n
|
|
134
|
+
app.use(i18nInstance.getI18n())
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
app,
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 4. 在组件中使用
|
|
143
|
+
|
|
144
|
+
```vue
|
|
145
|
+
<template>
|
|
146
|
+
<view>
|
|
147
|
+
<text>{{ $t('welcomeMessage') }}</text>
|
|
148
|
+
<button @click="changeLanguage">切换语言</button>
|
|
149
|
+
</view>
|
|
150
|
+
</template>
|
|
151
|
+
|
|
152
|
+
<script setup lang="ts">
|
|
153
|
+
import i18nInstance from '@/locales'
|
|
154
|
+
|
|
155
|
+
const changeLanguage = () => {
|
|
156
|
+
i18nInstance.switchLocale('en')
|
|
157
|
+
}
|
|
158
|
+
</script>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 从 Vue2 迁移到 Vue3
|
|
162
|
+
|
|
163
|
+
如果您的项目正在从 Vue2 升级到 Vue3,只需要:
|
|
164
|
+
|
|
165
|
+
### 步骤 1:更新引入路径
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// 之前 (Vue2)
|
|
169
|
+
import { createMeetFunI18n } from 'meetfun-i18n/vue2'
|
|
170
|
+
|
|
171
|
+
// 之后 (Vue3)
|
|
172
|
+
import { createMeetFunI18n } from 'meetfun-i18n'
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 步骤 2:更新依赖
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# 卸载 Vue2 相关依赖
|
|
179
|
+
pnpm remove vue@2 vue-i18n@8
|
|
180
|
+
|
|
181
|
+
# 安装 Vue3 相关依赖
|
|
182
|
+
pnpm add vue@^3.0.0 vue-i18n@^9.0.0
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 步骤 3:更新 main 文件
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
// 之前 (Vue2)
|
|
189
|
+
import Vue from 'vue'
|
|
190
|
+
Vue.use(i18nInstance.getI18n())
|
|
191
|
+
Vue.prototype.$i18nInstance = i18nInstance
|
|
192
|
+
|
|
193
|
+
// 之后 (Vue3)
|
|
194
|
+
import { createSSRApp } from 'vue'
|
|
195
|
+
const app = createSSRApp(App)
|
|
196
|
+
app.use(i18nInstance.getI18n())
|
|
197
|
+
app.config.globalProperties.$i18nInstance = i18nInstance
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 步骤 4:更新组件语法
|
|
201
|
+
|
|
202
|
+
```vue
|
|
203
|
+
<!-- 之前 (Vue2 Options API) -->
|
|
204
|
+
<script>
|
|
205
|
+
export default {
|
|
206
|
+
data() {
|
|
207
|
+
return {
|
|
208
|
+
text: this.$i18nInstance.$t('hello')
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
</script>
|
|
213
|
+
|
|
214
|
+
<!-- 之后 (Vue3 Composition API) -->
|
|
215
|
+
<script setup lang="ts">
|
|
216
|
+
import { ref } from 'vue'
|
|
217
|
+
import i18nInstance from '@/locales'
|
|
218
|
+
|
|
219
|
+
const text = ref(i18nInstance.$t('hello'))
|
|
220
|
+
</script>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## 注意事项
|
|
224
|
+
|
|
225
|
+
1. **引入路径**:这是唯一的区别,Vue2 必须从 `meetfun-i18n/vue2` 引入
|
|
226
|
+
2. **API 使用**:所有 API 方法在两个版本中完全相同
|
|
227
|
+
3. **类型支持**:两个版本都提供完整的 TypeScript 类型定义
|
|
228
|
+
4. **功能特性**:所有功能特性在两个版本中保持一致
|
|
229
|
+
|
|
230
|
+
## 常见问题
|
|
231
|
+
|
|
232
|
+
### Q: 可以在同一个项目中同时使用 Vue2 和 Vue3 版本吗?
|
|
233
|
+
|
|
234
|
+
A: 不可以。一个项目只能使用一个版本。请根据项目使用的 Vue 版本选择对应的引入路径。
|
|
235
|
+
|
|
236
|
+
### Q: 如果引入错误的版本会怎样?
|
|
237
|
+
|
|
238
|
+
A: 会出现类型错误或运行时错误。Vue3 项目使用 `/vue2` 路径会导致 vue-i18n 版本不匹配。
|
|
239
|
+
|
|
240
|
+
### Q: 两个版本的性能有差异吗?
|
|
241
|
+
|
|
242
|
+
A: 性能主要取决于 Vue 和 vue-i18n 的版本,本库在两个版本中的性能表现一致。
|
|
243
|
+
|
|
244
|
+
### Q: API 函数的实现需要改变吗?
|
|
245
|
+
|
|
246
|
+
A: 不需要。API 函数的实现在两个版本中完全相同。
|
|
247
|
+
|
|
248
|
+
## 相关文档
|
|
249
|
+
|
|
250
|
+
- [README.md](./README.md) - 完整的使用文档
|
|
251
|
+
- [VUE2_USAGE.md](./VUE2_USAGE.md) - Vue2 详细使用指南
|
|
252
|
+
- [USAGE_EXAMPLE.md](./USAGE_EXAMPLE.md) - 更多使用示例
|
|
253
|
+
|