使用者: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>
