齊與部署避坑)
簡(jiǎn)介這份漢化包面向使用 MyEclipse 10.7 的中國(guó) Java 開發(fā)者針對(duì)英文界面在菜單、提示與幫助文檔理解上的門檻提供較完整的中文語言替換方案。壓縮包共 484 個(gè)文件以 jar 語言資源、html 幫助頁面、xml 配置、properties 文本及少量 jpg 界面圖為主整體約 2.44MB體積輕便便于隨包留存和分發(fā)。漢化范圍覆蓋啟動(dòng)畫面與主界面、工程創(chuàng)建導(dǎo)入、代碼提示與語法檢查、Maven/Ant 構(gòu)建配置、斷點(diǎn)調(diào)試、服務(wù)器運(yùn)行配置以及數(shù)據(jù)庫(kù)管理、JSP/HTML 編輯、UML 建模等內(nèi)置插件和在線幫助并兼顧中文字符較寬帶來的控件寬度與排列適配。已有 216 人學(xué)習(xí)適合希望在不改變?cè)虚_發(fā)習(xí)慣的前提下降低語言障礙、快速熟悉 IDE 功能布局的初中級(jí)開發(fā)者也可作為團(tuán)隊(duì)統(tǒng)一中文環(huán)境的參考。資源側(cè)重界面本地化與文檔同步而非功能增強(qiáng)使用前宜保留原文件以便回退。1. MyEclipse 10.7 漢化到底改的是哪一層先認(rèn)清 Eclipse 3.7 的 NL 機(jī)制很多人拿到 MyEclipse 10.7 漢化包的第一反應(yīng)是解壓、拖進(jìn)安裝目錄、重啟然后發(fā)現(xiàn)菜單還是英文于是斷定“包是壞的”。真實(shí)的翻車點(diǎn)往往不在這。MyEclipse 10.7 的界面文字是分兩套來源的一套來自 Eclipse 3.7 底座另一套來自 MyEclipse 自己的商業(yè)插件。所謂漢化包本質(zhì)上是一批命名成xxx.nl_zh_CN_版本號(hào).jar的 NL fragment只有被 OSGi 識(shí)別、且版本號(hào)和宿主插件對(duì)上啟動(dòng)時(shí)才會(huì)被掛載。底座對(duì)上了文件 / 編輯 / 窗口 / 首選項(xiàng)這一層才是中文MyEclipse 特有的透視圖和服務(wù)器面板多數(shù)情況下仍是英文這不是安裝失敗。這篇按“認(rèn)底座 → 選包 → 落地 → 調(diào)參 → 排錯(cuò)”的順序走一遍適合還在維護(hù)老項(xiàng)目、必須用 10.7 這套環(huán)境的人。2. 版本對(duì)齊把 10.7 的底座和 zh_CN 語言包配成一對(duì)漢化能不能成八成取決于這一步。Eclipse 的 NL fragment 是“貼著宿主插件版本走”的宿主的org.eclipse.ui是 3.7.2你就不能塞一個(gè) 3.6.x 的翻譯包進(jìn)去哪怕文件名看著差不多。所以動(dòng)手之前先把底座版本釘死再去挑包順序不能反。2.1 確認(rèn)底座版本三個(gè)比“關(guān)于”對(duì)話框更可靠的入口最省事的做法是啟動(dòng) IDE 看“幫助 → 關(guān)于”但這一步有個(gè)前提IDE 得能正常起來。一旦你已經(jīng)被半吊子漢化包搞到啟動(dòng)卡死這招就廢了。我一般直接看文件三個(gè)位置任選位置關(guān)鍵內(nèi)容能讀出什么安裝根目錄.eclipseproductversion3.7.2底座主版本最直接Common\plugins\org.eclipse.core.runtime_*.jar文件名里的版本段運(yùn)行時(shí)版本判斷 SR 級(jí)別configuration\org.eclipse.equinox.simpleconfigurator\bundles.info每行 CSV含 bundle 符號(hào)名與版本實(shí)際被加載的插件清單排錯(cuò)時(shí)最有用MyEclipse 10.x 的插件目錄不在安裝根目錄下而是在Common\plugins和Common\features這一點(diǎn)和純 Eclipse 不一樣很多人第一次找插件版本會(huì)在這里迷路。寫個(gè)小腳本掃一遍比手工翻目錄快得多import re import pathlib # 改成你自己的安裝根目錄路徑里有空格記得用原始字符串 IDE_HOME pathlib.Path(rD:\MyEclipse\MyEclipse 10) PLUGINS IDE_HOME / Common / plugins # 只關(guān)心決定 UI 語言的那幾個(gè)宿主插件 TARGET re.compile(r^(org\.eclipse\.(?:ui|core\.runtime|platform|ui\.workbench))_(\d\.\d\.\d)) found {} for jar in PLUGINS.glob(*.jar): m TARGET.match(jar.name) if m: found.setdefault(m.group(1), set()).add(m.group(2)) for name in sorted(found): print(f{name:32s} - {, .join(sorted(found[name]))})這段腳本干的事很簡(jiǎn)單遍歷Common\plugins下的 jar用正則把插件符號(hào)名 主次修訂版本號(hào)摳出來按插件名歸并。TARGET里我只留了ui、core.runtime、platform、ui.workbench四個(gè)因?yàn)樗鼈儾攀遣藛巍?duì)話框、首選項(xiàng)頁面的文字來源。跑出來的結(jié)果如果是3.7.2那你要的語言包就必須是 Indigo SR2 那一批如果冒出3.6.x的混雜版本說明這個(gè)安裝目錄被前人手功覆蓋過先別急著漢化把底座修干凈再說。提示bundles.info是帶啟動(dòng)順序和 start-level 的用 Excel 或文本編輯器打開時(shí)按逗號(hào)分列能一眼看出某個(gè) NL jar 到底有沒有被登記進(jìn)去比翻configuration日志快。2.2 語言包選型整包、社區(qū)翻譯包、第三方整合包的差別市面上能拿到的 zh_CN 包大致三類名字都很像實(shí)際差別不小類型典型形態(tài)優(yōu)點(diǎn)風(fēng)險(xiǎn)點(diǎn)官方整包一個(gè)壓縮包內(nèi)含完整featuresplugins命名帶 SR 號(hào)版本嚴(yán)格對(duì)應(yīng)覆蓋完整體積大只覆蓋底座不含 MyEclipse 自有插件社區(qū)翻譯項(xiàng)目分包按插件拆成多個(gè)*.nl_zh_CN_*.jar可按需取用版本粒度細(xì)需要自己挑挑錯(cuò)版本號(hào)直接不加載第三方整合包打包成“一鍵安裝”腳本或自解壓程序省事常混入舊版本 jar覆蓋式安裝后極難回退選型原則就一條NL fragment 的版本號(hào)必須等于它要翻譯的那個(gè)宿主插件的版本號(hào)。舉例org.eclipse.ui.nl_zh_CN_3.7.2.xxxxxxxx.jar對(duì)應(yīng)的是org.eclipse.ui_3.7.2.xxxxxxxx.jar最后那串構(gòu)建號(hào)最好也一致。差一個(gè)修訂號(hào)大多數(shù)時(shí)候還能湊合加載差一個(gè)次版本號(hào)輕則界面部分回退成英文重則啟動(dòng)階段拋MissingResourceException連歡迎頁都進(jìn)不去。我在實(shí)際項(xiàng)目里更傾向于用官方整包因?yàn)樗偷鬃陌姹臼且黄鸢l(fā)布的省去逐條比對(duì)。如果只是想補(bǔ)幾個(gè)高頻界面的中文社區(qū)分包更靈活但也更考驗(yàn)?zāi)銓?duì)版本號(hào)的眼力。2.3 文件落地形態(tài)features 與 plugins 里到底該有什么解壓一個(gè)合格的 zh_CN 語言包目錄結(jié)構(gòu)應(yīng)該長(zhǎng)這樣langpack/ └── eclipse/ ├── features/ │ ├── org.eclipse.platform.nl_zh_CN_3.7.2.xxxx.jar │ └── org.eclipse.rcp.nl_zh_CN_3.7.2.xxxx.jar └── plugins/ ├── org.eclipse.ui.nl_zh_CN_3.7.2.xxxx.jar ├── org.eclipse.ui.workbench.nl_zh_CN_3.7.2.xxxx.jar └── org.eclipse.core.runtime.nl_zh_CN_3.7.2.xxxx.jarplugins下的 jar 是插件級(jí)翻譯負(fù)責(zé)具體視圖、編輯器、對(duì)話框的字符串features下的 jar 是特性級(jí)翻譯負(fù)責(zé)“安裝詳情”“關(guān)于”這類以 feature 為單位聚合的描述文本。兩者缺一表現(xiàn)不一樣只放plugins主菜單會(huì)變中文但“幫助 → 關(guān)于”里的特性描述還是英文只放features則是反過來的效果。這就是為什么有些人漢化完說“漢化了一半”其實(shí)不是包的問題是他只拷了半個(gè)目錄。對(duì)照檢查的方法很土但有效把語言包plugins里的 jar 名去掉.nl_zh_CN_版本號(hào)后綴得到宿主插件名再回頭看Common\plugins里有沒有同名宿主。有說明這條翻譯用得上沒有就是冗余文件留著也不會(huì)加載但會(huì)讓目錄越來越亂。3. 三種落地方式dropins、links、覆蓋安裝的取舍版本對(duì)齊之后才輪到“往哪兒放”。這三種方式我都在真機(jī)上跑過結(jié)論是日常用 links臨時(shí)試水用 dropins覆蓋安裝只在被逼到墻角時(shí)用。3.1 dropins 方式改動(dòng)最小但要接受首次啟動(dòng)不生效dropins 是 Eclipse 留給外部擴(kuò)展的目錄MyEclipse 安裝根目錄下默認(rèn)沒有需要自己建。放法有兩種我推薦帶子目錄的那種便于整塊刪除echo off set IDE_HOMED:\MyEclipse\MyEclipse 10 set LANG_SRCD:\download\langpack\eclipse REM 建立獨(dú)立的語言包目錄不要直接往 dropins 根下撒 jar if not exist %IDE_HOME%\dropins\zh_CN\plugins mkdir %IDE_HOME%\dropins\zh_CN\plugins if not exist %IDE_HOME%\dropins\zh_CN\features mkdir %IDE_HOME%\dropins\zh_CN\features xcopy %LANG_SRC%\plugins\*.jar %IDE_HOME%\dropins\zh_CN\plugins\ /Y /Q xcopy %LANG_SRC%\features\*.jar %IDE_HOME%\dropins\zh_CN\features\ /Y /Q echo done./Y是覆蓋時(shí)不詢問/Q是靜默兩個(gè)參數(shù)在批量刷機(jī)器時(shí)很省心。關(guān)鍵在于目錄層級(jí)dropins\zh_CN\下面必須是plugins和features兩個(gè)目錄p2 的 dropins 掃描器才認(rèn)得出來如果你把 jar 直接丟在dropins\zh_CN\根下它會(huì)被當(dāng)成普通 jar 忽略掉。這個(gè)層級(jí)的坑我踩過不止一次表現(xiàn)就是“明明拷進(jìn)去了重啟毫無變化”。dropins 的第二個(gè)坑是首次啟動(dòng)不生效。NL fragment 的掛載依賴-nl參數(shù)在啟動(dòng)早期生效而 dropins 目錄的掃描發(fā)生在 p2 reconciler 階段比它晚。所以正確姿勢(shì)是拷完文件帶-clean啟動(dòng)一次讓它把新 bundle 寫進(jìn)bundles.info再正常啟動(dòng)。后面第 4 章會(huì)細(xì)說。3.2 links 方式多語言切換和批量部署的正解links 方式是我現(xiàn)在只用的一種。原理是在links目錄下放一個(gè).link文本文件內(nèi)容是path指向語言包的實(shí)際位置啟動(dòng)器讀這個(gè)指針去加載。好處是語言包本體可以放在安裝目錄之外裝在 D 盤、共享盤、甚至 U 盤都行IDE 目錄本身不被污染。# 文件D:\MyEclipse\MyEclipse 10\links\zh_CN.link # 內(nèi)容只有一行路徑用正斜杠不要加引號(hào)不要以分號(hào)結(jié)尾 pathD:/MyEclipse/langpack/zh_CN而D:/MyEclipse/langpack/zh_CN這個(gè)目錄下同樣要有features和plugins兩個(gè)子目錄結(jié)構(gòu)和 2.3 節(jié)一致。.link文件有三個(gè)容易寫錯(cuò)的地方一是路徑分隔符必須用正斜杠/寫成反斜杠在部分版本上會(huì)被吃掉二是路徑里帶空格時(shí)不要加引號(hào)加了反而解析失敗三是行尾不要留多余的分號(hào)Eclipse 3.x 的解析器不接受。寫完之后配合-clean啟動(dòng)一次然后在“幫助 → 關(guān)于 → 安裝詳細(xì)信息 → 插件”里搜nl_zh_CN能搜到就說明加載成功。links 方式真正的價(jià)值在切換。你要臨時(shí)回到英文界面不用卸載把zh_CN.link改名成zh_CN.link.off再帶-clean啟動(dòng)一次即可。第 6 章會(huì)把這個(gè)動(dòng)作做成腳本。3.3 覆蓋安裝什么時(shí)候才值得用以及必須做的備份覆蓋安裝就是把語言包的features和plugins里的 jar直接拷進(jìn)Common\features和Common\plugins。它唯一的好處是“一定能被加載”因?yàn)槲募吞稍谒拗鞑寮赃叢淮嬖趻呙璨坏降膯栴}。在老版本啟動(dòng)器不認(rèn) dropins、links 又配不對(duì)路徑的情況下這是最后的后悔藥。代價(jià)是你失去了回退能力。Common\plugins里原本就有幾百個(gè) jar語言包往里一摻事后想分清哪些是后來加的只能靠文件名里的nl_zh_CN去篩。所以覆蓋之前必須先備份哪怕只是把整個(gè)Common目錄壓縮一份echo off set IDE_HOMED:\MyEclipse\MyEclipse 10 set BACKUPD:\backup\myeclipse10_common_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.zip REM 用系統(tǒng)自帶的 tarWin10 1803 可用打包避免依賴第三方壓縮工具 tar -a -c -f %BACKUP% -C %IDE_HOME% Common echo backup - %BACKUP%tar -a會(huì)根據(jù)輸出文件擴(kuò)展名自動(dòng)選擇壓縮格式.zip走 zip.tar.gz走 gzipWindows 10 之后自帶不用裝 7-Zip。備份完再覆蓋出問題直接把Common整個(gè)還原回去。注意覆蓋安裝之后如果將來用 IDE 自帶的更新機(jī)制升級(jí)NL jar 會(huì)被當(dāng)成“未知來源的插件”處理升級(jí)過程可能報(bào)校驗(yàn)失敗。這也是我不推薦覆蓋的原因之一。三種方式的取舍可以這么記只做一次、機(jī)器就一臺(tái)links要批量刷十幾臺(tái)開發(fā)機(jī)links 加共享路徑最省事試水階段怕搞壞環(huán)境dropins 加-clean前兩種都被環(huán)境卡住才上覆蓋并且先備份。4. 啟動(dòng)參數(shù)與緩存讓漢化真正生效的那幾個(gè)開關(guān)包放對(duì)了參數(shù)沒配對(duì)界面照樣是英文。這一步是純配置活但細(xì)節(jié)密度很高尤其是 ini 文件的參數(shù)順序。4.1 ini 文件認(rèn)哪個(gè)myeclipse.ini 和 eclipse.ini 不是一回事MyEclipse 10 的安裝根目錄下啟動(dòng)器是myeclipse.exe它讀的是同目錄的myeclipse.ini。有些人的目錄里同時(shí)存在eclipse.ini可能是從別的 Eclipse 拷貝過來的或者舊版本殘留改了半天沒反應(yīng)就是改錯(cuò)了文件。判斷方法很簡(jiǎn)單myeclipse.ini的第一行通常是-startup緊跟著的--launcher.library指向Common\plugins下的 launcher 插件路徑里帶Common就對(duì)了。一個(gè)可用的myeclipse.ini關(guān)鍵片段長(zhǎng)這樣-startup ../Common/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar --launcher.library ../Common/plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502 -vm C:/Java/jdk1.6.0_45/bin/javaw.exe -nl zh_CN -vmargs -Xms256m -Xmx1024m -XX:MaxPermSize256m -Duser.languagezh -Duser.countryCN參數(shù)順序是硬約束-nl屬于啟動(dòng)器參數(shù)必須寫在-vmargs之前-vmargs之后的所有內(nèi)容都會(huì)原樣傳給 JVM這時(shí)候再寫-nl就沒用了JVM 不認(rèn)識(shí)它會(huì)直接忽略。這個(gè)順序錯(cuò)位導(dǎo)致的“漢化不生效”占了我在群里見到的故障的一半以上。-Duser.languagezh和-Duser.countryCN是給 JVM 的默認(rèn) Locale 兜底主要影響日期、數(shù)字格式以及部分沒讀-nl的第三方插件。加上沒壞處但別指望它單獨(dú)就能把界面變中文。4.2 -clean 的時(shí)機(jī)什么時(shí)候必須加加幾次-clean的作用是清掉configuration目錄下的 OSGi 緩存強(qiáng)制重新掃描所有 bundle。它和漢化的關(guān)系是只要你動(dòng)過plugins、features、dropins、links里的任何一處舊緩存里的 bundle 清單就和實(shí)際文件對(duì)不上了必須-clean一次重建。判斷要不要加我一般看兩件事場(chǎng)景要不要 -clean說明首次安裝語言包要重建 bundle 清單登記 NL fragment修改.link文件的 path要路徑變了舊清單失效只改 ini 里的-nl值要Locale 變化需要重新解析 fragment日常啟動(dòng)不要每次加會(huì)拖慢啟動(dòng)十幾秒起步換工作空間不要工作空間和 bundle 緩存是兩回事還有個(gè)細(xì)節(jié)-clean在 Eclipse 3.7 上只清一次就夠第二次啟動(dòng)不要帶否則每次啟動(dòng)都在重建緩存。有些教程讓你常駐-clean那是把啟動(dòng)速度當(dāng)兒戲血淚經(jīng)驗(yàn)是別學(xué)。4.3 驗(yàn)證漢化生效的四個(gè)檢查點(diǎn)別只看菜單。四個(gè)檢查點(diǎn)按可信度從低到高排主菜單文件 / 編輯 / 窗口 / 幫助變中文。最直觀但也最容易被“半漢化”騙過去。首選項(xiàng)頁窗口 → 首選項(xiàng)左側(cè)樹的中文覆蓋率。這里如果只有頂層是中文、展開后全是英文說明plugins級(jí) NL 缺了一部分。安裝詳細(xì)信息幫助 → 關(guān)于 MyEclipse → 安裝詳細(xì)信息 → 插件搜nl_zh_CN。能列出條目說明 fragment 被 OSGi 認(rèn)了這是最硬的證據(jù)。bundles.info打開configuration\org.eclipse.equinox.simpleconfigurator\bundles.info搜nl_zh_CN。有記錄 已登記沒記錄 加載鏈路斷了回去查 dropins 層級(jí)或.link路徑。這四個(gè)點(diǎn)如果只有 1 通過、3 和 4 都不通過說明你看到的中文其實(shí)是某個(gè)插件的內(nèi)置翻譯不是你裝的語言包在起作用別高興太早。5. 排查與避坑漢化后啟動(dòng)失敗、半中半英的五個(gè)現(xiàn)場(chǎng)下面五條都是我在老機(jī)器上真實(shí)遇到過的按“現(xiàn)象 → 原因 → 解決”寫遇到同款可以直接對(duì)號(hào)入座。5.1 改了 ini 重啟毫無變化菜單依舊英文現(xiàn)象按教程在eclipse.ini里加了-nl zh_CN重啟多次界面紋絲不動(dòng)。原因啟動(dòng)器讀的是同目錄的myeclipse.inieclipse.ini根本沒被加載或者你把-nl寫到了-vmargs后面被當(dāng)成 JVM 參數(shù)吞掉了。解決確認(rèn)myeclipse.ini里-startup段的路徑含Common把-nl和zh_CN移到-vmargs之前然后帶-clean啟動(dòng)一次。改完先別急著看菜單去bundles.info里搜一下有沒有 NL 記錄那才是準(zhǔn)信號(hào)。5.2 啟動(dòng)卡在 splash或者起來后直接閃退現(xiàn)象加完語言包雙擊myeclipse.exe進(jìn)度條走到一半停住或者窗口一閃就沒了。原因語言包的版本和底座不匹配。典型是拿了 3.6 的包往 3.7.2 上懟NL fragment 聲明了對(duì)某個(gè)宿主版本的依賴OSGi 解析依賴失敗啟動(dòng)鏈在早期就斷了。解決先看工作空間\.metadata\.log搜MissingResourceException或Could not resolve module日志里會(huì)明確寫出是哪個(gè) bundle 解析失敗。確認(rèn)是版本問題后把語言包整個(gè)撤掉dropins 直接刪目錄、links 就改.link后綴、覆蓋安裝就還原備份換成與底座完全一致的版本再試。不要試圖靠刪幾個(gè) jar “修”版本問題那是在給自己挖坑。5.3 菜單中文了但 MyEclipse 特有的面板全是英文現(xiàn)象文件 / 編輯是中文切到 MyEclipse 透視圖服務(wù)器連接器、部署面板、數(shù)據(jù)庫(kù)瀏覽器全是英文。原因這不是故障。MyEclipse 自有插件是商業(yè)組件官方語言包里不包含它們的 NL fragment社區(qū)翻譯項(xiàng)目也極少覆蓋。漢化的邊界就在 Eclipse 底座這一層。解決接受這個(gè)邊界或者只對(duì)高頻菜單做局部漢化自己寫 NL fragment 不現(xiàn)實(shí)工作量大且隨版本失效。另外檢查一下是不是只拷了plugins沒拷features那種情況下“幫助 → 關(guān)于”里的特性描述會(huì)殘留英文容易和上面這種正?,F(xiàn)象混淆。5.4 首次啟動(dòng)沒反應(yīng)第二次啟動(dòng)突然變中文了現(xiàn)象裝完語言包第一次啟動(dòng)界面英文什么都沒改第二天再開變中文了。原因dropins 或 links 的 bundle 掃描發(fā)生在啟動(dòng)流程靠后的階段第一次啟動(dòng)只是把新 bundle 登記進(jìn)bundles.info真正掛載要等下一次啟動(dòng)。這就是“首次不生效”的機(jī)制。解決裝完立刻帶-clean啟動(dòng)一次然后再正常啟動(dòng)一次一次搞定省掉一天的困惑。反過來說如果你遇到“怎么都不生效”先確認(rèn)是不是每次都只啟動(dòng)了一次就放棄了。5.5 漢化之后項(xiàng)目里的中文注釋和字符串全變亂碼現(xiàn)象界面中文了打開原有項(xiàng)目Java 文件里的中文注釋變成一堆問號(hào)或方塊控制臺(tái)輸出也是亂碼。原因和漢化包沒關(guān)系。-nl zh_CN只影響界面 Locale工作空間的文本編碼是另一套設(shè)置。老項(xiàng)目多半是 GBK而新工作空間默認(rèn)跟隨系統(tǒng)或 UTF-8一錯(cuò)位就亂碼。解決窗口 → 首選項(xiàng) → 常規(guī) → 工作空間把“文本文件編碼”顯式設(shè)成項(xiàng)目實(shí)際用的編碼GBK 或 UTF-8單個(gè)項(xiàng)目還可以在項(xiàng)目屬性里覆蓋。同時(shí)檢查 ini 里有沒有多余的-Dfile.encoding有的話統(tǒng)一成和項(xiàng)目一致的值。這一條最容易背鍋給漢化包其實(shí)改兩行設(shè)置就好了。6. 進(jìn)階做一個(gè)中英文一鍵切換的啟動(dòng)腳本維護(hù)老項(xiàng)目的時(shí)候我經(jīng)常需要在中英文之間來回切自己看中文舒服但截圖給外部對(duì)接方、或者排查某個(gè)只記得英文名的菜單項(xiàng)時(shí)又得切回英文。手工改.link后綴、帶-clean、再啟動(dòng)一天折騰幾遍誰都煩。所以我把這套動(dòng)作固化成了一個(gè)批處理放在桌面雙擊就切。思路是語言包目錄保持不動(dòng)只改links\zh_CN.link的啟用狀態(tài)然后自動(dòng)帶-clean啟動(dòng)一次 IDE。腳本里用兩個(gè)標(biāo)記文件判斷當(dāng)前狀態(tài)避免重復(fù)切換。echo off setlocal enabledelayedexpansion REM 按實(shí)際安裝路徑修改 set IDE_HOMED:\MyEclipse\MyEclipse 10 set LINK_FILE%IDE_HOME%\links\zh_CN.link set FLAG%IDE_HOME%\links\.lang_state if not exist %LINK_FILE% ( echo [ERROR] link file not found: %LINK_FILE% exit /b 1 ) set STATEen if exist %FLAG% set /p STATE%FLAG% if /i %STATE%zh ( REM 當(dāng)前中文切英文改名禁用 link清狀態(tài) ren %LINK_FILE% zh_CN.link.off del /q %FLAG% 2nul echo switched to EN ) else ( REM 當(dāng)前英文切中文恢復(fù) link寫狀態(tài) if exist %LINK_FILE%.off ren %LINK_FILE%.off zh_CN.link echo zh%FLAG% echo switched to ZH ) REM 帶 -clean 啟動(dòng)一次重建 bundle 清單 start %IDE_HOME%\myeclipse.exe -clean endlocal腳本里有幾個(gè)點(diǎn)值得說明。setlocal enabledelayedexpansion是為循環(huán)和變量展開準(zhǔn)備的這個(gè)場(chǎng)景其實(shí)用不上但養(yǎng)成習(xí)慣沒壞處。ren改后綴這一步是關(guān)鍵Eclipse 只認(rèn).link結(jié)尾的文件.link.off會(huì)被忽略等于軟禁用語言包本體一個(gè)字節(jié)都沒動(dòng)隨時(shí)能切回來。-clean通過命令行傳比改 ini 更靈活用完就沒了不會(huì)讓每次啟動(dòng)都背著這個(gè)包袱。狀態(tài)判斷用的是一個(gè)標(biāo)記文件.lang_state里面寫zh表示當(dāng)前是中文態(tài)。這個(gè)做法有點(diǎn)土但比去解析bundles.info穩(wěn)得多——后者在異常退出時(shí)可能寫不完整反而誤判。第一次運(yùn)行時(shí)標(biāo)記文件不存在腳本默認(rèn)走英文態(tài)會(huì)把.link恢復(fù)回來這個(gè)行為是符合直覺的。如果你機(jī)器上裝了好幾套環(huán)境這個(gè)腳本稍微改改就能復(fù)用把IDE_HOME抽成參數(shù)外面套一層菜單一個(gè)腳本管三四個(gè)安裝目錄。我一般還會(huì)在腳本末尾加一行timeout /t 3避免窗口一閃而過看不到輸出。提示切換之后如果發(fā)現(xiàn) IDE 啟動(dòng)報(bào) bundle 沖突先別懷疑腳本去links目錄看看是不是殘留了.link.off和.link同時(shí)存在的情況。ren在目標(biāo)文件已存在時(shí)會(huì)失敗腳本里沒做覆蓋保護(hù)這是唯一需要人工確認(rèn)的點(diǎn)。從那以后我每次裝完語言包都會(huì)先把 ini 參數(shù)順序、bundles.info里的 NL 記錄、links目錄的實(shí)際狀態(tài)這三樣強(qiáng)制過一遍再談“漢化成功”。這三處任何一處沒對(duì)上界面上的中文都只是巧合。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取