Uniapp項目簡體中文轉臺灣繁體中文方法
準備工作
-
安裝必要工具
-
確保已安裝 Node.js(包含 npm)
-
在終端輸入以下命令驗證安裝:
node -v # 應顯示版本號如 v18.x npm -v # 應顯示版本號如 9.x
-
-
備份項目
具體操作步驟
1. 安裝 OpenCC
-
打開終端
-
進入項目根目錄
-
安裝 OpenCC(局部安裝到項目):
-
npm install opencc-js --save-dev
操作后驗證
# 檢查是否安裝成功
npm list opencc-js
# 運行測試轉換
node -e "console.log(require('opencc-js').Converter({from:'cn',to:'tw'})('測試')"
# 應輸出:測試
2. 創建配置文件
-
在項目根目錄 新建
s2tw.json文件-
右鍵項目文件夾 → 新建文件 → 命名
s2tw.json
-
-
編輯內容(示例):
{ "type": "s2tw", "dict": { "鼠標": "滑鼠", "博客": "部落格", "視頻": "影片", "軟件": "軟體" // OpenCC 默認已轉換,此處僅為示例 } }3. 創建轉換腳本
-
在項目根目錄 新建
convert-chinese.js -
粘貼以下代碼(注意修改
inputDir參數):const fs = require('fs'); const path = require('path'); const OpenCC = require('opencc-js'); // ??? 重點修改這里:指定你的源碼目錄 ??? const CONFIG = { inputDir: './src', // 需要轉換的目錄(如Uniapp的src文件夾) fileTypes: ['.vue', '.js', '.json'], // 目標文件類型 openccConfig: path.resolve(__dirname, 's2tw.json') // 配置文件路徑 }; const converter = OpenCC.Converter({ from: 'cn', to: 'tw' }); // 簡→臺繁 function processFile(filePath) { const content = fs.readFileSync(filePath, 'utf8'); const converted = converter(content); fs.writeFileSync(filePath, converted, 'utf8'); console.log(`Converted: ${filePath}`); } function traverseDir(dir) { fs.readdirSync(dir).forEach(entry => { const entryPath = path.join(dir, entry); if (fs.statSync(entryPath).isDirectory()) { traverseDir(entryPath); } else if (CONFIG.fileTypes.includes(path.extname(entryPath).toLowerCase())) { processFile(entryPath); } }); } console.log('?? 開始轉換,請確保已備份代碼!'); traverseDir(CONFIG.inputDir); console.log('? 轉換完成!立即通過 git diff 檢查變更');
4. 執行轉換
-
在終端運行腳本(仍在項目根目錄):
node convert-chinese.js
-
觀察輸出:
Converted: src/pages/index/index.vue Converted: src/App.vue ... ? 轉換完成!立即通過 git diff 檢查變更
關鍵位置示意圖
你的項目根目錄/ ├── src/ ← 代碼目錄(由 CONFIG.inputDir 指定) ├── node_modules/ ← 自動生成(安裝OpenCC后出現) ├── s2tw.json ← 自定義詞典 ├── convert-chinese.js ← 轉換腳本 └── package.json ← Node.js項目配置
修改轉換腳本配置調整轉換腳本的 掃描范圍 和 文件過濾規則。以下是具體修改方法:
const fs = require('fs'); const path = require('path'); const OpenCC = require('opencc-js'); // ??? 重點修改這裡:指定你的源碼目錄 ??? const CONFIG = { inputDir: './', // 需要轉換的目錄(如Uniapp的src文件夾) fileTypes: ['.vue', '.js', '.json', '.wxml', '.wxss'], // 目標文件類型 excludeDirs: ['node_modules', 'unpackage', 'dist', 'static'], // 排除不需要的目錄 openccConfig: path.resolve(__dirname, 's2tw.json') // 配置文件路徑 }; const converter = OpenCC.Converter({ from: 'cn', to: 'tw' }); // 簡→臺繁 // 處理特殊文件(如 pages.json) // 針對 JSON 文件可能出現的中文鍵名問題,添加 鍵值雙轉換邏輯 function processFile(filePath) { const content = fs.readFileSync(filePath, 'utf8'); let converted = converter(content); // 特別處理 JSON 鍵名(如 "navigationBarTitleText": "首頁") if (path.extname(filePath) === '.json') { try { const jsonObj = JSON.parse(converted); const convertedObj = deepConvertKeys(jsonObj); // 遞歸轉換鍵名 converted = JSON.stringify(convertedObj, null, 2); } catch (e) { console.error(`JSON 解析失敗: ${filePath}`, e); } } fs.writeFileSync(filePath, converted, 'utf8'); } // 遞歸轉換對象鍵名 function deepConvertKeys(obj) { if (typeof obj !== 'object' || obj === null) return obj; return Object.keys(obj).reduce((acc, key) => { const newKey = converter(key); // 轉換鍵名 acc[newKey] = deepConvertKeys(obj[key]); // 遞歸處理值 return acc; }, Array.isArray(obj) ? [] : {}); } // 增強目錄遍歷邏輯 // 更新 traverseDir 函數,添加目錄排除邏輯 function traverseDir(dir) { fs.readdirSync(dir).forEach(entry => { const entryPath = path.join(dir, entry); const isDir = fs.statSync(entryPath).isDirectory(); // 跳過排除目錄 if (isDir && CONFIG.excludeDirs.includes(entry)) { console.log(`跳過目錄: ${entryPath}`); return; } if (isDir) { traverseDir(entryPath); } else { const ext = path.extname(entryPath).toLowerCase(); if (CONFIG.fileTypes.includes(ext)) { processFile(entryPath); } } }); } console.log('?? 開始轉換,請確保已備份代碼!'); traverseDir(CONFIG.inputDir); console.log('? 轉換完成!立即通過 git diff 檢查變更'); -

浙公網安備 33010602011771號