如何避免react-intl-translations-manager删除现有翻译?
解决react-intl-translations-manager删除未扫描翻译键的问题
遇到这种情况确实挺闹心的——工具自动清掉了通知系统这类不在babel扫描范围内的翻译键,我给你几个可行的解决方案:
1. 直接禁用未使用键的删除(最简单)
react-intl-translations-manager默认会删除未在提取的messages中找到的键,你只需要在配置里添加removeUnusedKeys: false,就能阻止这个行为:
const manageTranslations = require('react-intl-translations-manager').default; manageTranslations({ messagesDirectory: 'src/messages/', translationsDirectory: 'src/locales/', languages: ['en_GB', 'fr_FR'], removeUnusedKeys: false // 关键配置:禁止删除未扫描到的键 });
这个方法最直接,但缺点是会保留所有历史遗留的翻译键,如果你需要定期清理无用键的话,可能需要手动处理。
2. 用白名单保留特定键(更精细)
如果你只想保留通知相关的特定键,而不是全部旧键,可以配置whitelist选项,把需要保留的键列进去:
const manageTranslations = require('react-intl-translations-manager').default; manageTranslations({ messagesDirectory: 'src/messages/', translationsDirectory: 'src/locales/', languages: ['en_GB', 'fr_FR'], whitelist: [ 'notification.success.title', 'notification.error.content', // 把所有通知相关的翻译键都列在这里 ] });
注意:如果之前白名单没生效,大概率是键的拼写和翻译文件里的完全不一致,要确保键名(包括大小写、层级)完全匹配。
3. 手动合并未被扫描的消息(最规范)
如果想让这些通知键被工具“识别”为有效键,你可以手动创建一个额外的消息文件,比如src/messages/notification-messages.json,内容格式和babel提取的messages一致:
[ { "id": "notification.success.title", "defaultMessage": "Operation Successful" }, { "id": "notification.error.content", "defaultMessage": "Something went wrong" } ]
然后在配置里使用customMessagesHandler来合并这个额外文件和提取的messages:
const manageTranslations = require('react-intl-translations-manager').default; const fs = require('fs'); const path = require('path'); manageTranslations({ messagesDirectory: 'src/messages/', translationsDirectory: 'src/locales/', languages: ['en_GB', 'fr_FR'], customMessagesHandler: (messages) => { // 加载额外的通知消息 const extraMessagesPath = path.join(__dirname, 'src/messages/notification-messages.json'); const extraMessages = JSON.parse(fs.readFileSync(extraMessagesPath, 'utf8')); // 合并到现有messages中 return [...messages, ...extraMessages]; } });
这样工具会把这些手动添加的键当作正常提取的键,既不会删除它们,也会在更新翻译时保留,同时不影响清理真正无用的旧键。
你可以根据自己的需求选择其中一种方案,第一种最快,第三种最规范,能保持翻译库的整洁。
内容的提问来源于stack exchange,提问作者Corentin Daillie
相关产品推荐
相关产品推荐

