app4.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const fs = require('fs');
  2. const path = require('path');
  3. // 配置
  4. const projectDir = './pages'; // 你的 UniApp 项目路径
  5. const langFilePath = './output3.json'; // 本地语言文件路径
  6. const ignoredFiles = ['node_modules', 'locale']; // 忽略的文件夹或文件
  7. // 加载语言文件
  8. let langData = {};
  9. if (fs.existsSync(langFilePath)) {
  10. const langFileContent = fs.readFileSync(langFilePath, 'utf-8');
  11. langData = JSON.parse(langFileContent);
  12. }
  13. // 正则表达式:匹配汉字
  14. const chineseRegex = /[\u4e00-\u9fa5\u3000-\u303f\uff01-\uff5e\u201c-\u201d\u3008-\u3011]+/g;
  15. // 处理单个文件
  16. function processFile(filePath) {
  17. let content = fs.readFileSync(filePath, 'utf-8');
  18. const matches = content.match(chineseRegex);
  19. if (matches) {
  20. matches.forEach((text) => {
  21. // 如果语言文件中不存在该汉字,则生成一个唯一的 key
  22. // if (!langData[text]) {
  23. // const key = `text_${Object.keys(langData).length + 1}`;
  24. // langData[text] = key;
  25. // }
  26. // 替换为 $t('key') 形式
  27. const key = langData[text];
  28. const replacement = `$t('${key}')`;
  29. content = content.replace(new RegExp(text, 'g'), replacement);
  30. });
  31. // 写回文件
  32. fs.writeFileSync(filePath, content, 'utf-8');
  33. }
  34. }
  35. // 遍历目录
  36. function traverseDirectory(dir) {
  37. const files = fs.readdirSync(dir);
  38. files.forEach((file) => {
  39. const fullPath = path.join(dir, file);
  40. const stats = fs.statSync(fullPath);
  41. if (stats.isDirectory()) {
  42. // 忽略指定的文件夹
  43. if (!ignoredFiles.includes(file)) {
  44. traverseDirectory(fullPath);
  45. }
  46. } else if (stats.isFile()) {
  47. // 只处理 .vue 和 .js 文件
  48. if (/\.(vue|js)$/.test(file)) {
  49. processFile(fullPath);
  50. }
  51. }
  52. });
  53. }
  54. // 主函数
  55. function main() {
  56. console.log('开始转换汉字为国际化格式...');
  57. // 遍历项目目录
  58. traverseDirectory(projectDir);
  59. // 更新语言文件
  60. fs.writeFileSync(langFilePath, JSON.stringify(langData, null, 2), 'utf-8');
  61. console.log(`语言文件已更新:${langFilePath}`);
  62. console.log('转换完成!');
  63. }
  64. main();