使用者:Xacid
出自 MozTW Wiki
其實不知道要寫什麼,就隨便放一些筆記。
Nvu 0.90 中文化
試著使用 piaip 提供的工具 MozLCDB 進行中文化的工作, 的確是方便很多,比起之前一堆 *.dtd, *.properties 弄得頭昏眼花好多了。以 Nvu 為例, piaip 之前已經製作了 0.50 版的 locale 檔 , 就可以用 MozLCDB 把之前的翻譯成果匯入資料庫,不過還需要 0.50 的英文語系檔,要自己到 Nvu 下載 Nvu 0.50 、解壓縮取出英文 en-US.jar 。抓完 MozLCDB 和中英文 0.50 的 locale 以後全部解壓縮到 mozlcdb/ , 中英的 locale 分別放在 mozlcdb/zh-TW/, mozlcdb/en-US/ ,再下一層目錄放的就是 global/ 等資料夾。然後執行:
- $ perl mozlcdb.pl -n en-US zh-TW
如此可產生 mozlcdb.txt 和 current.txt 。 mozlcdb.txt 是詞庫,紀錄所有翻譯過的詞 (glossary) , current.txt 則存放待翻譯的部份;當然這邊 piaip 已經全部翻完了。詞庫匯入以後剛剛的 en-US, zh-TW 都可以砍了。 接著是匯入 0.90 的 locale ,把 0.90 的 en-US.jar 解壓縮到 mozlcdb/ ,產生的 locale/ 底下就是 global/ , 所以執行:
- $ perl mozlcdb.pl -i locale/
這樣就匯入 0.90 的詞庫了,再看看 glossary 的內容,之前匯入的翻譯還在,也有些是新的;而 current.txt 的內容則完全是沒翻譯過的。 這時候就可以開始編輯 current.txt ,格式很簡單, ";" 開頭的都是註解。使用熟悉的 UTF-8 文字編輯器把中文填上去就可以, 我這時候才發現 vim 可以自動區塊化編輯:
; [MozLCDB] mozilla localization database: current editing ; Get MozLCDB from http://moztw.org/tools/mozlcdb/ ; extra keys: cm=COMMENT and kp=1 (KEEP) [communicator-platform/mac/platformCommunicatorOverlay.dtd] id=redoCmd.label en=Redo tr=這裡就是放翻譯過的詞
翻完以後 (我當然是翻了兩個就急著想先看看結果啊) ,要把 glossary 更新,也就是把 current.txt 的翻譯內容更新到 mozlcdb.txt 裡, 執行:
- $ perl mozlcdb.pl -u
發現產生一些編碼的問題,不過這些特殊的編碼通常是不常見的某種語言名稱,跟我要做的中文沒有關係,所以改用大 -U 強制執行。 然後就從資料庫匯出到 locale/ (裡面的 *.dtd, *.properties) :
- $ perl mozlcdb.pl -X locale/
小 -x 應該是第一次建立的時候用,不過我從一開始 locale/ 就在那了,所以用大 -X 。 然後用 zip 格式包成 en-US.arj ,不要壓縮。接著覆蓋原來的語系檔:
- $ zip -r0 en-US.arj locale/
- $ cp en-US.arj ../nvu-0.90/chrome/
這樣就完成了。表面上似乎經過不少步驟,但是一想到 Mozilla, Firefox 這些程式有多少語系設定檔,這些步驟還是輕鬆得多; 更何況這樣做還可以在不同版本之間,甚至是 Mozilla 和 Netscape 這樣不同軟體之間維護語系檔,真的方便許多。 這真的是 piaip 多年經驗累積下來的智慧啊!
ps. 後面那幾個步驟我是用這個 script 來作啦:
#/bin/sh # Usage: # upxzic.sh [ROOT] [locale].jar [path to nvu/chrome] echo "updating..." perl mozlcdb.pl -U echo "exporting to $1..." perl mozlcdb.pl -X $1 echo "zipping to $2..." zip -9c -q $2 $1 echo "copying to $3..." cp $2 $3
關於網頁技術
使用 getElementById("") 做選單
其實應該可以完全用 CSS 寫,可是用 CSS 好像就沒辦法點一次開、再點一次收。 這只是一個簡單的範例,有些地方怪怪的,實際用的時候可能需要用 CSS 美化。
<html> <head> <script language="JavaScript"> function modifyMenu(menuId){ menu=document.getElementById(menuId); if( menu.style.display == "none") menu.style.display = "block"; else menu.style.display = "none"; } </script> <style type="text/css"> #menu1, #menu2{ display:none; } </style> </head> <body> <div onmousedown="modifyMenu('menu1')">選單之一 <ul id="menu1"> <li>次選單一</li> <li>次選單二</li> <li>次選單三</li> </ul></div> <div onmousedown="modifyMenu('menu2')">選單之二 <ul id="menu2"> <li>次選單一</li> <li>次選單二</li> <li>次選單三</li> </ul></div> </body> </html>
position:fixed 的使用
看到一個關於固定圖層的討論,麻煩的是 IE 不能用 position:fixed ,還會把 body 多加空的捲軸;而 Firefox 不能使用滑鼠滾輪捲動 overflow:scroll 製造的捲軸。於是很 dirty 的利用 IE 不能用的 selector ,製造出固定的圖層,而且在 Firefox 中也可以用滑鼠捲動。其實根本是純粹無聊, IE 沒有的東西不要管他就好了。
<html> <head> <style type="text/css"> <!-- body{ padding:0; margin:0; overflow:auto; } #main{ position:absolute; height:100%; width:100%; overflow:auto; } body > div#main{ height:auto; overflow:visible; } #fixed{ position:absolute; top:100px; right:100px; z-index:100; background-color:#aaaaff; } body > div#fixed{ position:fixed; } --> </style> </head> <body> <div id="fixed"> <h1>Fixed!</h1> </div> <div id="main"> *********************<br /> *********************<br /> *********************<br /> *********************<br /> (repeats) </div> </body> </html>