
續前文: VS Code英漢詞典進化效果演示: 翻譯檔案所有命名

vscode"英漢詞典"插件地址: 官方鏈接
現在實作的效果比之前的演示差很多, 因為executeDocumentSymbolProvider回傳的識別符號比想象中的少很多. 而且像main這樣的常用術語還未進行合適的手工翻譯.
提取檔案中識別符號并翻譯的相關部分代碼:
provideTextDocumentContent(uri: vscode.Uri): string | Thenable<string> {
// TODO: 如果沒有當前活躍編輯器, 回傳空
let textEditor = vscode.window.activeTextEditor;
return vscode.commands.executeCommand<vscode.DocumentSymbol[]>('vscode.executeDocumentSymbolProvider', textEditor.document.uri)
.then(
(symbols: Array<vscode.DocumentSymbol>) => {
for (var 識別符號 of symbols) {
this.原命名串列.push(釋義處理.消除英文小括號內容(識別符號.name));
for (var 子識別符號 of 識別符號.children) {
this.原命名串列.push(釋義處理.消除英文小括號內容(子識別符號.name));
}
}
// 長詞先查釋義, 以免出現一個命名"xxxxyyyy"先替換了yyyy而xxxx未替換的情況
this.原命名串列.sort(function (a, b) { return b.length - a.length });
var 新內容 = textEditor.document.getText();
for (var 原命名 of this.原命名串列) {
let 中文釋義 = 查詞.取釋義(原命名).釋義;
let 翻譯 = 釋義處理.取欄位中所有詞(原命名).length > 1
? 中文釋義
: 釋義處理.首選(中文釋義, 詞典常量.詞性_計算機);
if (翻譯) {
新內容 = this._replaceAll(新內容, 原命名, 翻譯);
}
}
return 新內容;
}
)
}
-------------- 坑 --------------
之后廢了一個小時在這個出現過的這個插件發布才會碰到的問題: Error: Item has already been added. Key in dictionary · Issue #5 · program-in-chinese/vscode_english_chinese_dictionary
初步分析有兩個問題:
- 如果兩個中文檔案名有同樣長度, 比如"查詞.ts"和"功用.ts", 在本地打包不會有問題(vsce package), 但是在發布時(vsce publish), 估計服務端在保存到后端時會將這兩個檔案誤識別成重命名.
- 更隱蔽一點的, 在無數次重命名后發現, 在運行publish時, 它不會清理本地的js輸出檔案夾(這里是out/). 因此在重命名程序中生成的所有.js檔案都仍然存在. 導致這無數次重命名都沒有效果.
打算復現并報告第一點這個bug. 對第二點的權宜之計---發布前手動清理out目錄!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/215416.html
標籤:其他
