refactor(page-table, page-dialog-form): 实现国际化自动响应,移除提前翻译逻辑

1. 为page-table和page-dialog-form添加内部$t翻译逻辑,支持语言切换自动更新
2. 移除data()中提前翻译的k()辅助函数,改为直接传入i18n key
3. 更新文档说明最新的i18n使用规范,新增迁移指南文档
4. 修复工厂区域页面的国际化调用方式,统一使用this.key()传参
This commit is contained in:
sheng
2026-05-28 11:30:08 +08:00
parent 48cfebd008
commit 4539bec3a4
6 changed files with 351 additions and 219 deletions

View File

@@ -200,16 +200,13 @@ import { i18nMixin } from '@/composables/useI18n'
export default {
mixins: [i18nMixin('page.production_master_data.factory_model.factory_area')],
data () {
const t = this.$t.bind(this)
const k = (s) => t(this.key(s)) // 当前页面翻译
const ck = (s) => t(this.ckey(s)) // 公共翻译
return {
// 传入完整 i18n key不在此处翻译由子组件内部 $t() 处理
formCols: [
[{ label: k('code'), placeholder: k('enter_code') }]
[{ label: this.key('code'), placeholder: this.key('enter_code') }]
],
rules: {
code: [{ required: true, message: k('enter_code'), trigger: 'blur' }]
code: [{ required: true, message: this.key('enter_code'), trigger: 'blur' }]
}
}
},
@@ -236,12 +233,13 @@ export default {
</template>
```
### 4.3 data() 中翻译的时机说明
### 4.3 data() 中传参的时机说明
`data()``created` 之前执行,此时 `this` 已经可用。因此:
- **column label / formCols / rules.message**:在 `data()` 中或 `created()``this.key()` 都可以
- **推荐在 `data()` 中用 `k()` 提前翻译**,避免子组件 `$t()` 的 webpack HMR 缓存问题
- **column label / formCols / rules.message**:在 `data()` 中或 `created()` `this.key()` 传入完整 i18n key
- **翻译由子组件负责**`page-table` `page-dialog-form` 内部使用 `$t()` 翻译传入的 key切换语言时自动响应更新
- **不要用 `k()` 提前翻译**`k()` 将 key 翻译成静态字符串,语言切换后不会更新
---
@@ -382,7 +380,7 @@ this.$t('please_enter', { name: '所区编码' })
- [ ] 5. 验证 JSON 合法性:`node -e "JSON.parse(require('fs').readFileSync('src/locales/zh-chs.json','utf8'))"`
- [ ] 6. 页面中使用 `mixins: [i18nMixin('key前缀')]`
- [ ] 7. 模板中用 `$t(key('xxx'))` 替代硬编码文字
- [ ] 8. data() 中用 `k('xxx')` 提前翻译 formCols / rules
- [ ] 8. data() 中用 `this.key('xxx')` 传入完整 i18n key不用 `k()` 提前翻译)
- [ ] 9. 公共文案(帮助、确定、取消等)用 `ckey('xxx')` 引用
- [ ] 10. `pnpm lint` 无报错