/** * i18next-scanner 配置文件 * 用于扫描代码中的翻译 key 并自动更新 locale JSON 文件 * * 使用方法: pnpm run i18n */ const typescriptTransform = require('i18next-scanner-typescript') module.exports = { input: [ 'src/**/*.{js,jsx,ts,tsx,vue}', // 扫描 js、jsx、ts,tsx, vue 文件 '!test/**/*.spec.{js,ts}', // 排除测试文件 '!src/locales/**', // 排除 locales 文件夹 '!**/node_modules/**' // 排除 node_modules ], output: './', options: { debug: false, removeUnusedKeys: true, sort: true, func: { // 扫描的函数名 list: ['t', '$t', 'i18n.t'], extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue'] }, trans: { // Trans 组件 (如果使用) component: 'Trans', i18nKey: 'i18nKey', defaultsKey: 'defaults', extensions: ['.js', '.jsx', '.tsx', '.vue'], fallbackKey: false }, // 支持的语言 lngs: ['en', 'zh-cn'], ns: ['translation'], defaultLng: 'zh-cn', defaultNs: 'translation', // 默认值策略:中文使用 key 本身,英文留空待翻译 defaultValue: (lng, ns, key) => { if (lng === 'zh-cn') { return key } return '' }, resource: { loadPath: 'src/locales/{{lng}}.json', savePath: 'src/locales/{{lng}}.json', jsonIndent: 2, lineEnding: '\n' }, nsSeparator: false, // 禁用 namespace 分隔符 keySeparator: false, // 禁用 key 分隔符,支持扁平化 key interpolation: { prefix: '{{', suffix: '}}' } }, // TypeScript 和 Vue 文件解析支持 transform: typescriptTransform({ extensions: ['.ts', '.tsx', '.vue'], tsOptions: { target: 'esnext' } }) }