文/李海亭
VBA(Visual Basic for Applications)是微軟公司面向Off ice系列軟件而開發的一種程序設計語言,利用VBA編程可以將常見的辦公任務操作自動化(Mansf ield 2010, xxvii,3),從而提高工作效率。雖然翻譯技術在翻譯界已經得到了普遍認可,而且利用各種程序語言開發的翻譯工具數不勝數,但是利用VBA編程來開發翻譯工具仍然必不可少。因為現在翻譯工具所要處理的文件基本上都是各種辦公軟件文檔,特別是word文檔。在各種計算機輔助翻譯軟件和機器翻譯軟件處理翻譯文檔之前都要對文檔進行加工,從翻譯工具導出之后還要對譯文進行校對。這種譯前處理和后期校對基本都可以在off ice文件中完成。作為Off ice一個重要組件,VBA在譯前和譯后文檔的處理過程中有著舉足輕重的作用。
雖然目前國內還沒有文獻專門討論VBA編程在翻譯中的應用,但已經有人在文獻中提到了VBA編程在翻譯中的作用(徐彬,郭紅梅,2017:96-101;徐彬,郭紅梅,國曉立2007:80;徐彬,2010:47;徐彬,曹軍,2017:97;)。王 華 樹(2013:23-28;2017:25)也將VBA編程看成是翻譯技術能力的一部分。不過他們用的術語是宏錄制或者宏命令,其實宏只不過是VBA編程的一般說法,實際上專業教材或者學術就叫VBA編程(英文VBA programming)。這里介紹兩款翻譯術語工具的VBA編程開發,對其中遇到的一些問題進行了闡述,以期對今后VBA編程在翻譯中的應用有所啟發。
翻譯術語庫在現代翻譯技術中起著非常重要的作用,各種翻譯術語工具已經成為翻譯技術中不可分割的一部分。雖然現在已經有各種各樣的術語管理工具,但是利用off ice VBA開發簡單實用的術語管理工具仍然必不可少。其主要原因有以下兩點:第一,對各種術語的處理仍然離不開各種off ice軟件,而且這類軟件也是管理術語數據的系統(王華樹,冷冰冰,2017:79)。例如絕大多數CAT軟件都可以將存儲雙語對照術語的Excel表格加載到術語庫中供翻譯時參考,也可以將術語庫中的術語導出為Excel或者CSV(用Excel表格打開)文件,方便術語數據的存儲和交換。雖然這些CAT軟件也可以使用數據庫或者TXT格式文檔,但是因為TXT屬于無格式文檔,顯示和可讀性較差,并不利于大多數譯者使用。而絕大多數譯者也并不習慣和熟悉數據庫的各種操作。第二,在翻譯術語的搜集、編輯、校對和整理過程中,off ice文件仍然起著非常重要的作用。例如利用Word通配符的強大編輯功能,可以對雙語術語文件進行整理,也可以在兩種語言的術語之間插入一個制表符,從而快速將從各種渠道獲得的雙語詞表編輯為雙語對照的表格形式。這種格式可以直接復制到Excel表格中或者TXT文檔中,然后加載到各種CAT軟件的術語庫中作為參考。作為off ice軟件一個重要部分,VBA有非常強大的編程功能,可以將許多翻譯術語的操作自動化,并且還可以開發一些實用的術語管理界面,從而提高術語管理的效率。

圖1:術語校對程序界面
術語編輯校對是保證術語質量,進而保證翻譯質量的關鍵步驟。無論是從翻譯文件、記憶庫和語料庫中提取出來的術語,還是在翻譯中添加進術語庫中的術語,以及從網絡資源或其他渠道獲取的各種術語,都要對其進行認真編輯和校對以確保術語翻譯的準確性,從而保證術語庫的質量。然而目前的各種術語管理軟件對于術語編輯校對的處理并不能令人滿意。
(1)現在的各種術語編輯和校對工具都是以表格的形式呈現,長時間編輯校對容易錯行。現在的翻譯術語工具無論是在線工具還是單機工具;無論是獨立工具還是集成工具,在翻譯術語的編輯和校對上都是以表格的形式呈現。這種表格形式在處理較少的術語時還不會有什么問題,但是如果處理較多的術語時因為校對者長時間對著表格,容易產生錯行(當然部分軟件可以通過將所處理的行高亮的形式而避免錯行)。即使將術語庫中的術語導出為TXT和Excel表格形式,在編輯和校對過程中也會存在一定問題。因為TXT是無格式文檔,無法對字體和段落格式進行設置,而且許多不可打印字符無法顯示,導致大多數用戶都不使用這種格式進行文字編輯處理。而Excel也是表格形式,從人體工程學來講并不是編輯和校對術語的最佳格式。
(2)由于大多數術語管理工具對翻譯術語都是多行同時呈現,長時間盯著,令人會眼花繚亂。由于現在大多數的術語管理工具都是以表格的形式呈現,用戶在編輯校對的過程中同時盯著好多行術語,短時間還可以應付,時間長了后必然會眼花繚亂,從而影響校對的效率和質量。
(3)術語過多而需要多次編輯校對時,編輯者會有遺忘現象。術語庫中包含的術語可多可少。編輯和校對少量的術語可以在短時間內完成,不存在編輯校對者產生遺忘現象,但是當術語校對者要處理成千上萬條術語時,一次難以完成校對任務,必然需要多次校對。如果兩次校對相隔時間較長,校對者可能會忘記上次校對停止的位置。如果有多位校對者相互合作時,也同樣存在后面校對者不知道前面校對者停止校對的位置,從而不知應該從哪里繼續校對的問題。
針對以上問題,筆者在提取和校對化工類術語庫時,利用Excel VBA設計了一款術語校對工具,具體的設計和開發如圖1所示。
面對建筑工程行業規模不斷壯大的發展趨勢,工程測量在建筑工程項目建設中占據的地位越來越突出。在這種情況下,必須加快測繪新技術的研發與應用,充分借助計算機等技術的優勢,推動工程測量水平的不斷提升。此外,立足于當前測繪新技術發展實情以及我國的科學技術水平,在未來測繪新技術必然會向智能化、自動化、管理可視化等方向發展。而作為企業必須立足于行業發展狀況,積極引進先進的測繪技術,不斷提高經濟利潤和綜合效益。

圖2:待翻譯的Word文檔

圖3:插入術語譯文后的文檔
根據以上分析可以看出,這款術語校對工具的最主要功能就是突破其他各種術語編輯和校對工具在術語校對過程中的呈現方式,即表格形式。因此,這款術語校對工具最重要的部分就是術語呈現的界面設計。校對工具的具體界面設計如圖1所示。在這個界面中,有兩個文本框,兩個標簽和三個命令按鈕。兩個文本框分別呈現每一條術語的原文和譯文;對應的標簽說明兩個文本框所呈現術語的不同語言。點擊“上一個”命令按鈕,可以返回剛剛編輯過的一條術語;點擊“下一個”按鈕會保存目前已經編輯校對過的術語并且自動切換到下一條需要編輯校對的術語。點擊“退出”按鈕,會自動保存已經編輯校對過的所有術語,記住目前已經編輯到的術語位置,并且直接退出程序,同時也退出Excel應用程序。下次打開程序時,可以自動跳到上一次編輯到的位置。如果校對完畢,程序會發出提示,詢問是否再次校對。如果點擊確認,校對位置從第一條術語重新開始。這樣,在校對包含成千上萬條術語的術語表時就不用擔心忘掉上一次所校對到的術語條目;同時在多人連續校對時,后面的校對者不用擔心不知道前面的校對者校對到了哪一條術語。
兩個文本框不僅僅用來顯示每一條術語的原文和譯文,而且在校對者發現術語原文或者譯文有錯誤時可以直接在文本框中修改,修改過的原文或者譯文術語會直接保存到譯文或者原文原來所對應的單元格。為了運行方便,在存儲術語的工作表中添加了一個名為“開始運行”命令按鈕。點擊該命令按鈕,程序會加載校對界面,同時將Excel程序最小化,這樣就避免了界面后Excel表格的影響,使校對者每次僅僅關注界面上所顯示的一條術語的原文和譯文。
此外界面上的命令按鈕和文本框按照Windows常用快捷鍵方法進行了設置。例如按Tab鍵會自動轉到界面上下一個項目;按Enter鍵表示確認等,這樣更方便用戶使用快捷鍵進行操作。
上面的術語校對工具使用Excel VBA編寫。這里介紹如何利用Excel VBA調用word VBA的功能實現將Excel表格中所存儲的術語譯文插入到待翻譯的word文檔中,并以不同的顏色突出顯示術語原文和譯文(插入前后的效果分別如圖2和圖3所示)。這個術語譯文自動插入工具不僅僅可以用于翻譯,同時也可以輔助外語學習者閱讀專業文獻,因為一些專業術語已經插入譯文,可以通過譯文來幫助學習者對文獻的理解。
現在的翻譯產業處于2.0時代,這個時代的最突出特征是翻譯技術的廣泛使用(陽瓊,2018:26-29)。現在各種CAT工具已經在翻譯界得到了認可和使用。然而,由于各種原因,仍然有一些譯者在翻譯中不愿或者不會使用CAT工具,因此他們很難享受到現代翻譯術語庫為翻譯所帶來的便利,也難以保證在與別人合作翻譯中保持術語翻譯的一致性。然而即使在僅僅使用Off ice軟件進行翻譯的條件下,也可以利用Off ice VBA的編程功能開發一定的工具,從而使這些譯者能夠享受到現代翻譯術語庫所帶來的便利。這個術語自動插入工具正是基于這種需求而設計的。
4.2.1 長短短術語相互干擾
這款工具的主要功能是將保存在Excel表格中的翻譯術語譯文直接插入到word文檔中并且突出顯示術語原文和譯文,因此在開發中并不需要設計特殊界面。開發中遇到的核心問題是如何保證在插入術語的過程中不會出現各種錯誤。而產生錯誤最主要的原因是長術語和短術語相互影響問題。以下先對這個問題進行描述,然后探討如何解決。
在許多專業領域中,一些由多個詞語組成的長術語中會有包含某些詞語,而這些詞語本身也是術語。例如在化學中二氧化碳(carbon dioxide)是一個術語,而其中的碳(carbon)這個詞本身也是一個術語;而經濟學中長期成本(long-run cost)是一個術語,而其中成本(cost)也是一個術語。這些長術語和短術語之間有一定的聯系,但是由于它們所表達的概念內涵有較大的差異,并不能像一般造句那樣,用短詞語相互結合而組成長術語。例如雖然二氧化碳與碳有聯系,但是二氧化碳和碳表示完全不同的兩種物質,它們的組成和性質有很大的不同。因此短術語和長術語在翻譯術語庫中都有存在的必要,并不能用短術語的相互結合來代替作為整體的長術語。
這種情況給本程序工具的開發帶來了一個難題。如果先在原文中插入短術語的譯文,必然會破壞長術語的整體性。以carbon dioxide來說,因為先在carbon后面插入(碳),結果就變成了carbon(碳)dioxide,這樣在查找carbon dioxide時就會無法查找出預期的結果。相反,如果先插入長術語的情況下,又會出現術語重復插入的問題。仍以carbon dioxide為例,假如先在它后面插入了對應的漢語譯文,結果就會成為carbon dioxide(二氧化碳);這時候carbon仍然單獨存在,所以在后面查找carbon時就會重復插入短術語,最終出現carbon(碳)dioxide(二氧化碳)這樣錯誤的結果。這兩個問題不能僅僅通過改變長術語和短術語插入的順序來解決。要解決這個核心問題必然要從其他方面尋找路徑。
4.2.2 核心問題解決方法
由于這款工具開發的基本思路是將Excel工作表單元格中的每一條術語原文作為同一個變量的不同取值,再將該取值作為查找項在Word文檔中查找術語原文,查找到該術語原文后,用術語原文(術語譯文)的格式替換術語原文。因此避免上面所提到的核心問題的基本思路就是:在查找到該術語并插入譯文后避免再次查找到這條術語。這一點在Word查找中并不難達到,因為在Word查找過程中,如果文檔中有隱藏文字,而且在顯示設置中不勾選“隱藏文字”(對應的VBA語句為:Application.ActiveWindow.View.ShowHiddenText=False)和“顯示所有格式標記”(對應的VBA語句為:Application.ActiveWindow.View.ShowAll=False)兩個復選框,隱藏文字就不會被查找到。因此,如果查找到了某條術語并且插入譯文后,將術語原文(術語譯文)設置為隱藏文字,同時在命令中設置不顯示隱藏文字和不顯示所有格式。以后查找時就查找不到該術語和它的譯文,也就不會再有術語重復查找和插入的問題。
然而,這樣就產生了另一個問題:如果先查找的是短術語,而長術語中所內嵌的短術語也會被當成短術語而被查找出來,而這樣又會破壞長術語的整體性。因此這時候就只能先查找長術語,等長術語作為整體被查找和插入譯文并設置為隱藏文字后,自然不會再被查找出來。這樣就不會影響后面短術語的插入。而要先插入長術語,后插入短術語就必須先按照術語原文的字符長度對術語進行逆序排列。

圖4:插入術語程序設計流程圖
基于以上的分析,為了解決上述問題需要先在Excel中對術語進行降序排序,并且在Word中設置字體的隱藏格式并設置顯示為不顯示隱藏文字和不顯示所有格式。具體的思路為:先計算術語的字符長度并在Excel中對術語進行降序排列,也就是字符最長的術語在最前面而字符最短的術語在最后面。這樣可以保證前面插入的長術語的整體性。提前將Word的視圖格式設置為“不顯示隱藏文字”和“不顯示所有格式”。為了避免在后面的查找和插入短術語時長術語的整體性被破壞,采用每查找到一條術語并插入它的譯文就將它們的字體格式設置為隱藏的格式,并且字體顏色設置為不同顏色(本程序設置成了紅色)。經過這樣的處理后,Word在查找后面的術語時,由于前面已經查找并插入過譯語的術語原文不會被查找出來,就避免了后面的術語對前面術語的影響。這種設置充分利用了在Word查找替換的屬性,最終實現了程序所要達到的目的。
以上面提到的兩條化學術語為例。假如Word文檔中既有carbon dioxide同時也有carbon這兩條術語。先查找出所有的carbon dioxide并且在后面插入(二氧化碳),然后將carbon dioxide (二氧化碳)整體設置為隱藏字體。由于視圖設置為“不顯示隱藏字體”和“不顯示所有格式”,所以這個整體就不再在Word文檔中顯示,后面查找單獨的carbon時也就不會再次查找出carbon dioxide中的carbon而只能查找到單獨的carbon并插入它的對應譯文(碳)。
等到Excel表中所有的術語已經查找完成后,再將Word視圖更改為“顯示隱藏文字”(對應的VBA語句為:Application.ActiveWindow.View.ShowHiddenText=True)和“顯 示 所有格式”對應的VBA語句為 Application.ActiveWindow.View.ShowAll=False),這時就可以重新顯示隱藏字體,然后再將所有的隱藏字體更改為非隱藏字體。這樣最終插入的效果就可以正常顯示了。
整個程序設計的流程圖如圖4所示。
以上說明了如何用off ice VBA語言編寫兩個不同的術語管理工具。由于現代翻譯中主要處理的文件都以off ice軟件的形式呈現,因此VBA編程在翻譯中有非常大的開發潛力。希望更多的譯者在能夠學會和掌握這種語言編程,最終促進翻譯效率的提高。