2010年12月14日 星期二

有時電腦的問題真的很奇怪...

上週某個工作日,對一台六年前的電腦灌了系統(Ubuntu10.10),裝好之後準備連上線上網更新,但是檢測硬體寫軟體參數改設定檔搞了半天網路就是死不正常,(ping都可以,然後上google很ok很順,但是其他網站就是點下去讀取超久的抓不到,連我放在校內的server也如此回應= ="),就連語系更新都怪怪的只有english可以選....

就在奮戰七小時正打算放棄時,我決定不顧一切直覺的拔下了電源線之後重插回去,網路就十分正常了.............

有沒有哪位好心的大德可以告訴我到底發生了什麼事?在這之前網路線我也拔過,也重開機N次了,還是一樣啊啊啊啊~~!!!!

我google不到啊,為什麼拔掉電源線可以解決網路問題?Why?!











如果您和我一樣倒楣透了,症狀也很像我所描述的那樣,希望下面的關鍵詞可以幫助您找到這篇文章,節省除錯的時間...讓我們一起接受神秘的力量感召...e04..!還我的寶貴光陰啦!! 

關鍵詞: ubuntu 網路異常 網路不正常 更新失敗 語系更新不正常

2010年12月12日 星期日

2010年12月7日 星期二

新安裝ubuntu的一些基本設定(10.10版)

1.因為ibus有一些問題,所以更改輸入法為scim
sudo apt-get install scim scim-chewing; sudo im-switch -s scim-bridge

2.參閱http://blog.jsdan.com/2759,將sources.list改為台灣區樹德科大10.10的來源:


#deb cdrom:[Ubuntu 10.10 _Maverick Meerkat_ - Release i386 (20101007)]/ maverick main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to

# newer versions of the distribution.

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick main restricted

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick main restricted

## Major bug fix updates produced after the final release of the

## distribution.

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick-updates main restricted

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu

## team. Also, please note that software in universe WILL NOT receive any

## review or updates from the Ubuntu security team.

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick universe

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick universe

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick-updates universe

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu

## team, and may not be under a free licence. Please satisfy yourself as to

## your rights to use the software. Also, please note that software in

## multiverse WILL NOT receive any review or updates from the Ubuntu

## security team.

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick multiverse

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick multiverse

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick-updates multiverse

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick-updates multiverse

## Uncomment the following two lines to add software from the ‘backports’

## repository.

## N.B. software from this repository may not have been tested as

## extensively as that contained in the main release, although it includes

## newer versions of some applications which may provide useful features.

## Also, please note that software in backports WILL NOT receive any review

## or updates from the Ubuntu security team.

# deb http://tw.archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse

# deb-src http://tw.archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical’s

## ‘partner’ repository.

## This software is not part of Ubuntu, but is offered by Canonical and the

## respective vendors as a service to Ubuntu users.

# deb http://archive.canonical.com/ubuntu maverick partner

# deb-src http://archive.canonical.com/ubuntu maverick partner

## This software is not part of Ubuntu, but is offered by third-party

## developers who want to ship their latest software.

deb http://extras.ubuntu.com/ubuntu maverick main

deb-src http://extras.ubuntu.com/ubuntu maverick main

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick-security main restricted

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick-security main restricted

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick-security universe

deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick-security universe

deb http://ubuntu.stu.edu.tw/ubuntu/ maverick-security multiverse


deb-src http://ubuntu.stu.edu.tw/ubuntu/ maverick-security multiverse

3.系統都更新完之後,記得直接在終端機當中打入gconf-editor修改gedit的編碼設定以加入BIG5編碼支援
(沒有sudo喔!!!加了sudo就變成改root的設定了,這樣平常怎麼開都還是認不出BIG5)
,加入方法網路上寫得很多,圖文並茂寫得又清楚的可參考:

電腦不難-[Ubuntu]解決gedit中文亂碼問題  http://pcnoproblem.twbbs.org/ubuntu-gedit/

簡單來說就是終端機下輸入 gconf-editor 後在裡面的apps/gedit-2/preferences/encodings/ 當中編輯auto_detected這一個值裡面,多加入一個BIG5來判別就好啦~


2010年11月25日 星期四

Centos安裝好第一件事:防止使用root直接登入ssh

理由很簡單,
因為telnet預設不能用,能用的最簡單入口是ssh的服務,修改這東西是為了安全,為了免去一竿子說不完的壞處。
作法如下:
vi /etc/ssh/sshd_config
找到 #PermitRootLogin yes  這一行,改為PermitRootLogin no
儲存,重新啟動ssh服務即可  =>service sshd restart

另外,不想寫入sshd設定檔,但是想改進入的port,請將服務啟動的port改變:/usr/bin/sshd -p 想改的port號碼

*附帶一提,請在做此設定前確認有新增除了root外的一般新使用者,並且已經加入該使用者之密碼(passwd)以啟動該使用者帳戶,否則....遠端進不去自己的機器很囧的啦~~


2010年11月24日 星期三

CentOS基礎

跟centos有極度相關的論壇,點選連結直接看電子報,有繁體中文的! http://wiki.centos.org/zh-tw/Newsletter
不自量力 の Weithenn:CentOS 5.x-初始環境設定

使用 yum 升級你的系統 (redhat9 升級到 CentOS 3.3)   http://phorum.study-area.org/index.php/topic,28648




Centos安裝好第一件事:防止使用root直接登入ssh

理由很簡單, 因為telnet預設不能用,能用的最簡單入口是ssh的服務,修改這東西是為了安全,為了免去一竿子說不完的壞處。 作法如下: vi /etc/ssh/sshd_config 找到 #PermitRootLogin yes  這一行,改為PermitRootLogin no儲存,重新啟動ssh服務即可  =>service sshd restart 另外,不想寫入sshd設定檔,但是想改進入的port,請將服務啟動的port改變:/usr/bin/sshd -p 想改的port號碼 *附帶一提,請在做此設定前確認有新增除了root外的一般新使用者,並且已經加入該使用者之密碼(passwd)以啟動該使用者帳戶,否則....遠端近不去自己的機器很囧的啦~~

Linux查看版本的方法

1.核心查詢: uname -a
結果: Linux 2.6.18-164.6.1.el5xen #1 SMP Tue Nov 3 17:53:47 EST 2009 i686 i686 i386 GNU/Linux
cat /proc/version
結果: Linux version 2.6.18-164.6.1.el5xen (mockbuild@builder16.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Tue Nov 3 17:53:47 EST 2009
2.現在使用套裝系統版本查詢 cat /etc/issue
結果: CentOS release 5.5 (Final) Kernel \r on an \m
lsb_release -a
結果: LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch Distributor ID:    CentOS Description:    CentOS release 5.5 (Final) Release:    5.5 Codename:    Final

Linux底下/etc/passwd的說明

/etc/passwd檔的說明:
root:x:0:0:root:/root:/bin/bash 

  1 :2:3:4:  5 :   6 :   7 
依序為 1.使用者帳號 2.密碼,通常都改放到/etc/shadow中囉! 3.UID,0是系統管理員,1-499是預設系統帳號,500以後是一般使用者 4.GID,和/etc/group對應. 5.使用者資訊說明欄位 6.家目錄路徑 7.預設使用的shell
/etc/shadow的說明:

zorobackup:$6$5Fz4PPyU$r8eFBu307H:14795:0:99999:7:::

   1  :                  2       :   3 :4:  5  :6:7:8:9
1.帳號名稱  2.密碼,如果字串長度改變,因為演算法沒有辦法處理,可以讓該密碼失效(例如前面加個!之類的) 3.最近改密碼的日期(聽說是從1970/01/01開始累加喔!) 4.多少天之內不可變更密碼的天數 5.密碼多少天之後強制要求變更 6.密碼強制變更前的警告天數 7.密碼過期後的寬限天數 8.帳號失效日期,過了那一天這個帳號就都不能用了喔! 9.保留欄位,也就是看之後會不會有新功能的意思
忘記密碼怎麼辦?! 一般使用者請找root申訴, root請找live cd掛載/etc/shadow後清光該密碼欄位後即可進入,或是進入單人模式,會直接以root的shell執行,再自己改密碼囉!

2010年11月21日 星期日

Pidgin的msn一直出現omega.contacts.msn.com憑證錯誤!!!解決辦法。

這兩天發生的新狀況,我自己發生時pidgin版本號為2.6.6~原因似乎是msn的SSL憑證會一直動態改變!(該死!)

解決辦法如下:

(1)根據官網的說法"Pidgin 2.7.6 fixes the MSN certificate issue and enables multiple MSN logins" 所以,先上去更新pidgin 吧~如果直接用ubuntu內建的更新管理員會找不到最新的pidgin,請先安裝這個Pidgin PPA package ,安裝完畢之後(一直按下一步就可以裝好了!),再使用系統內建的系統管理員,這時就可以找到最新版本的pidgin囉!

(2)接下來應該就可以正常的使用了,如果還是不行,根據筆者上網google的結果,就要上 https://omega.contacts.msn.com把這個憑證安裝到家目錄下的.purple/certificates/x509/tls_peers/omega.contacts.msn.com取代原有的憑證就可以了!不過這個方法過一陣子還是會一直跳憑證錯誤,很煩。

(3)如果有最新解法再說~請大家善用 Google大神 ~  orz

-------------2010/11/23新增,以下內容來自Tsung's Blog,2010/11/19的文章-------------
ubuntu似乎還沒發出2.7.6版的情況下,可以先下載這個msn-pecan,呃,也就是說請在終端機當中輸入
: sudo apt-get install msn-pecan
重點是裝好以後,請到pidgin當中修改帳號,通訊協定選擇WLM,然後重新啟動即可。


2010年11月4日 星期四

空白樂譜與空白常用表格文件列印~

空白樂譜與空白常用表格文件列印~


一個超讚的空白格式文件網站(英文),格式多到不行,光是樂譜就有幾十種: http://www.printablepaper.net/category/music
另一個也很讚的網站,將常用的空白樂譜表格按照樂曲分類列出: http://people.virginia.edu/~pdr4h/musicpaper/
優勢音樂網(中文)空白樂譜列印: http://www.yusmusic.com/index.php?act=product&CategoryID=186

喔喔~最後一個是無敵的網站,空白樂譜自己調整,想要怎麼樣做就怎麼樣做!(英文)不過好像有些瀏覽器不太相容...請用相容的瀏覽器即可!   http://www.blanksheetmusic.net/

最後,就是ubuntu等自由軟體使用者不可不知的跨平台打譜軟體啦~MuseScore~官方網站: http://musescore.org/zh-hant

空白樂譜與空白常用表格文件列印~

一個超讚的空白格式文件網站(英文),格式多到不行,光是樂譜就有幾十種: http://www.printablepaper.net/category/music
另一個也很讚的網站,將常用的空白樂譜表格按照樂曲分類列出: http://people.virginia.edu/~pdr4h/musicpaper/
優勢音樂網(中文)空白樂譜列印: http://www.yusmusic.com/index.php?act=product&CategoryID=186

喔喔~最後一個是無敵的網站,空白樂譜自己調整,想要怎麼樣做就怎麼樣做!(英文)不過好像有些瀏覽器不太相容...請用相容的瀏覽器即可!   http://www.blanksheetmusic.net/

最後,就是ubuntu等自由軟體使用者不可不知的跨平台打譜軟體啦~MuseScore~官方網站: http://musescore.org/zh-hant


2010年10月28日 星期四

網站為什麼都是亂碼?!utf-8與big5傻傻分不清楚!

網站為什麼都是亂碼?!utf-8與big5傻傻分不清楚!


今天製作一個網頁的uft-8,結果在準備收工時拿到IE8底下測試,熊熊發現網頁完全空白!而且明明加入了meta標籤,預設的編碼還是big5~!為了解決這問題,改了好幾次,最後發現的結果又是IE與眾不同......囧rz

解決方法如以下文字引用: http://businesswing.net/php/3-4/ ,2010.10.28

資訊小百科:網頁為何會有亂碼或空白頁? html會先依文件內容本身編碼選擇編碼,但IE(包含IE6至IE8)在網頁沒有指定編碼的語法下會以該電腦預設編碼為預設編碼。所以UTF-8編碼網 頁若沒有指定編碼會變成亂碼。 若網頁有<meta http-equiv=”Content-Type” content=”text/html; charset= UTF-8″> 標籤,瀏覽器會依照標籤重新設定編碼方式,所以若標籤內描述的編碼與文件內容編碼不一致,網頁就會出現亂碼。 Firefox或其他非IE瀏覽器在解析編碼時,只要找到meta標籤,就會重新定義網頁編碼,不論meta標籤的順序在title標籤之前或後;而IE 找到meta標籤後,開始定義網頁編碼,在這一行之前則依照電腦預設編碼,換言之,若meta標籤在title標籤之後,解析title時會出現編碼不一 致的情況,而會以空白頁的方式顯示。 所以,當您要設計UTF-8網頁,為了避免瀏覽器瀏覽出現亂碼或空白頁,請您確認以下三個步驟:
1.確認網頁文件編碼為UTF-8 
2.確認網頁有加上<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>

3.確認上述meta標籤在title標籤之前
另外,根據某網頁敘述(看太多頁面,忘記了~"~),utf-8在meta當中最好不要減省為utf8,有些瀏覽器會無法判讀!

網站製作注意事項

今天製作一個網頁的uft-8,結果在準備收工時拿到IE8底下測試,熊熊發現網頁完全空白!而且明明加入了meta標籤,預設的編碼還是big5~!為了解決這問題,改了好幾次,最後發現的結果又是IE與眾不同......囧rz



解決方法如以下文字引用: http://businesswing.net/php/3-4/ ,2010.10.28



資訊小百科:網頁為何會有亂碼或空白頁?
html會先依文件內容本身編碼選擇編碼,但IE(包含IE6至IE8)在網頁沒有指定編碼的語法下會以該電腦預設編碼為預設編碼。所以UTF-8編碼網
頁若沒有指定編碼會變成亂碼。
若網頁有<meta http-equiv=”Content-Type” content=”text/html; charset=
UTF-8″>
標籤,瀏覽器會依照標籤重新設定編碼方式,所以若標籤內描述的編碼與文件內容編碼不一致,網頁就會出現亂碼。
Firefox或其他非IE瀏覽器在解析編碼時,只要找到meta標籤,就會重新定義網頁編碼,不論meta標籤的順序在title標籤之前或後;而IE
找到meta標籤後,開始定義網頁編碼,在這一行之前則依照電腦預設編碼,換言之,若meta標籤在title標籤之後,解析title時會出現編碼不一
致的情況,而會以空白頁的方式顯示。
所以,當您要設計UTF-8網頁,為了避免瀏覽器瀏覽出現亂碼或空白頁,請您確認以下三個步驟:


1.確認網頁文件編碼為UTF-8


2.確認網頁有加上<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>



3.確認上述meta標籤在title標籤之前


另外,根據某網頁敘述(看太多頁面,忘記了~"~),utf-8在meta當中最好不要減省為utf8,有些瀏覽器會無法判讀!

2010年10月18日 星期一

麻煩的DNS設定~"~,詳細理解請點內文前二行的連結

和IPv4同樣的需要有正反解,比較複雜一些,請發揮耐心與嘗試錯誤的勇氣吧!

鳥哥的私房菜 http://linux.vbird.org/linux_server/0350dns.php#DNS_Zones

對了,除了鳥哥,還有個地方可以去看看:TWNIC的dns教學計畫 http://dns-learning.twnic.net.tw/
以下整理內容僅獻給健忘症的自己~
2010.10.19後記:剛好學校的dns server掛掉,結果上網google關鍵字centos dns,赫然發現自己很久以前寫下的那篇居然比鳥哥還前面!真是太神奇了! 所以,也把那篇連結放進來這裡囉,呵呵! http://blog.xuite.net/zoro00000/blog/20712222
還有還有,這篇寫得真好! http://blog.weithenn.org/2009/04/centosbind9-domain-nameip.html

    首先,先進行本機/etc/hosts的設定:
vi /etc/hosts,加入以下內容:
    ::1    localhost6.localdomain6 localhost6                           <----本機的正反解
    2001:288:4677::225      www.ipv6.jges.mlc.edu.tw www   <-----主機名稱的正反解紀錄,請輸入自己的IP位址與DNS解析名稱

----------------------------------------------------------1.預設環境----------------------------------------------------------------------
確定電腦能上網了後,如果是要弄內部虛擬機器互連之類的,記得先進入/etc/resolv.conf 修改nameserver的IP變成你準備設置Dns主機的位置喔!這個檔案一般來說剛把主機設定好就會順帶寫好,如果忘記了就自己快點加上吧~

vi /etc/resolv.conf

nameserver 163.19.1.1
nameserver 168.95.1.1
domain jges.edu.tw
search  jges.edu.tw
簡單說明一下:
nameserver就是上層單位的Dns位置,最多三個,從上而下進行逐層的搜尋,都找不到就不能dns啦~要設對才能上網喔! 
domain則是當輸入的名稱例如www無法被解析時,自動會被加入後面字串再嘗試解析,也就是在這邊會變成www.jges.edu.tw 
search的功能基本上和domain相似,不過domain是本地端有優先權,其他想自動加入的就都可以掛在search底下發揮囉.
-----------------------------------------------------------------------------------------------------------------------------------
還有還有,像ubuntu之類沒有預設開啟DNS的機器上記得要先輸入service bind9 start開啟bind的功能啦~(bind後的數字自己看看版本吧,建議使用Bind9,bind的維護網站:http://www.isc.org/software/bind )

1.設定檔傳統上是/etc/named.conf ,CentOS現在為了安全性放在/var/named/chroot
2.一般來說, CentOS 的預設目錄是這樣的:
    * /var/named/chroot/etc/named.conf :這就是我們的設定檔啦!
    * /etc/named.conf :這也是我們的設定檔啦!
    * /etc/sysconfig/named :是否啟動 chroot 及額外的參數,就由這個檔案控制;
    * /var/named/ :資料庫檔案預設放置在這個目錄
    * /var/run/named :named 這支程式執行時預設放置 pid-file 在此目錄內。
    順帶一提,ubuntu底下的檔案都是放在/etc/bind喔~
3. DNS 伺服器的架設需要上層 DNS 的授權才可以成為合法的 DNS 伺服器。
4. named 是否啟動成功務必要查閱 /var/log/messages 內的資訊!

一個完整的DNS設定案例內容需包含六個檔案,例如dns1位於163.19.1.1的整個class c領域jges.edu.tw:
 
  1. named.conf       :設定檔
  2. jges.fwd       :jges.edu.tw 的正解
  3. jges.rev  :163.19.1.0/24 的反解
  4. named.root       :root (.) 的資料庫
  5. localhost.fwd  :localhost 的正解
  6. localhost.rev    :127.0.0.1/24 的反解
可對應的主機名稱可能有www.jges、dns.jges、www1.jges、www2.jges、server.jges、ftp.jges、ftp2.jges、...
底下預設幾台主機來對應:
163.19.1.1    163.19.1.2    dns1和dns2
163.19.1.3    163.19.1.4     www.jges dns.jges linux.jges
163.19.1.30   mail
163.19.1.31  imap(第二台mail主機)
163.19.1.50  dept1.jges.edu.tw網域的第一台dns
163.19.1.51  dept1.jges.edu.tw網域的第二台dns
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Bind這個DNS程式的設定檔named.conf 主要的作用在於定義
named的功能項目
內容可包含4個部分,分別為:
*options
*關於 .(root) 的內容
*關於 localhost 的正反解
*關於其他 domain 的正反解
然後,在named.conf當中,可設定的伺服器型態有5種: (也就是等一下會看到的type)

master: 主要伺服器,在網域中負責名稱解析。
slave: 避免master發生故障時影響網路上的名稱解析工作,可以安裝其他的DNS伺服器,並會定期複製master中的資料。
stub: 與slave類似,但只會複製master的NS紀錄,而非所有區域(zone)資訊。
hint: 表示為root伺服器。
forward: 可將來自用戶端的名稱解析要求代為轉送至其他伺服器。 (本文未提,流量大時比較好用喔!)
vi /var/named/chroot/named.conf                      
 (這個檔案中註解寫法是//)(;代表到此為止,每行都要加喔!)
 
options {
        directory       "/var/named";                                    //指定Server中有關的zone file的設定檔儲存路徑
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        pid-file        "/var/run/named/named.pid";           //代表dns服務的pid名稱,通常用預設
        forwarders     { 163.19.1.1;168.95.1.1; };
        allow-query    { any; };  // 是否允許被查詢?當然要可以被查詢;
        allow-transfer { none; }; // 一定要寫,定義哪些IP可與此DNS做AXFR,是否允許傳送 zone ,預設為none,不寫就是被看光啦~
};
 
include "/etc/rndc.key";  // 關於 DNS 伺服器的一些加密資料,看不懂就先忽略!
 
// 關於 root (.) 的設定喔:
zone "." {
        type hint;                // 特殊的類別!專給 root (.) 用的,表示如果沒有資料就可以到根伺服器查詢
        file "named.root";        // 就是檔名的定義啦!
};
 
// 關於本機 localhost 的正反解
zone "localhost" {
        type master;
        file "localhost.fwd";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "localhost.rev";
};
 
// 這裡規範出我們的 jges.edu.tw 領域名正反解,in-addr.arpa是固定的反解格式,不可改
zone "jges.edu.tw" {
        type master;
        file "jges.fwd";
        allow-transfer {163.19.1.2/32;};   //可加可不加,看有沒有slave的需求.
};
zone "1.19.163.in-addr.arpa" {
        type master;
        file "jges.rev";        allow-transfer {163.19.1.2/32;};
};
zone "jges.edu.tw" {                    
//這串字只是為了做slave的例子才加入的,請寫入在163.19.1.2這第二台dns上
       type slave;             masters { 163.19.1.1; };              
       file "slave.jges.fwd";                    //這邊是指slave這台電腦的dns備份檔要放哪邊 
       allow-transfer {none;};};                                
zone "1.19.163.in-addr.arpa" {       //這串字只是為了做slave的例子才 加入的,請寫入在 163.19.1.2這第二台dns上
       type slave;             masters { 163.19.1.1; };              
       file "slave.jges.rev";                    
       allow-transfer {none;};};      
                   
 allow-transfer參數可以在單一的zone內設定定義喔!
還有上面的file"檔名"當中的檔名都可以自己亂取,不過要記得就一定要做好相對名稱的檔案就是啦~
反解的例子:163.19.1.xx這個區段的反解寫法就一定是1.19.163.in-addr.arpa,不能亂改喔!
arpa 是美國國防部計畫的縮寫,in-addr是Internet Address的意思,如果是用於ipv6的反解,請將in-addr改成ip6

-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
接下來是named.root這個檔,大家都用一樣的就好了,下載網址:ftp://rs.internic.net/domain/named.root ,這個檔很重要,DNS解析查詢都會先到這個檔案裡!
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
呃,底下會看到一個萬惡的@符號,這其實就是您自己在named.conf當中定義的那個領域啦!就是$ORIGIN後面接的東西,也就是說在這裡是zone"xxxx"當中那個xxxx的意思!
這個符號花了我很久很久很久的時間我才看懂..........奇怪了...除了自己笨之外,可能都要怪鳥哥沒有寫$ORIGIN.......冏
還有IN,代表的是internet類別的意思.(目前除了IN,也別無其他類型囉)
------------------------------------------------------------分隔線上面是重要的說明-------------------------------------------------
典型的SOA RR如下:
xxx.edu.tw 1D IN SOA ns1.xxx.edu.tw HostMaster.xxx.edu.tw
-------------------------------------------------------------------------------
vi /var/named/chroot/var/named/jges.fwd             (這種檔案中註解寫法是;)
 
$TTL    86400                          ;整個程式的宣告時間,以秒為單位的資源記錄時間喔
$ORIGIN jges.edu.tw.               ;整個程式的宣告開頭網域,也可以不用設定,說明底下沒有使用.而省略的網域為何,可以在不同段落改變宣告成自己需要的子網域,沒設定就以named.conf中的zone為準.建議一定加上.
;下面這行請照抄,翻譯成文字也就是 jges.edu.tw. IN SOA jges.edu.tw. 後面接上root的email位址.(據說SOA後面接的jges.edu.tw.是給做slave dns的機器看的,所以在這邊應該改成dns1.jges.edu.tw.或更偷懶的dns1
@    IN   SOA  dns1.jges.edu.tw.  root.jges.edu.tw.  
;這邊有個該死的 " . "  ,這東西一定要加喔!如果忘記加後面會自動加上zone的名稱!例如localhost忘記加.就自動被變成 了localhost.localhos.啦!當然,底下可以看到例如www之類後面不加點的也是這個.的妙用~請參照前幾行寫的$ORIGIN 
              (                  
                20100705001  ;Serial  , 僅作為序號而已,不過一更新請記得就要做調整,不然slave可是不會來抓的喔!
               28800       ; Refresh slave 伺服器的更新時間
               14400       ; Retry   當 slave 主機更新失敗,多久再重新更新一次
               720000      ; Expire  重複 retry 多久後就宣告不治....不再更新
               86400 )     ; Minimum 可視為 TTL ,尤其是你沒有設定 $TTL 時
 
@           IN   NS   localhost.  ;這邊看@不順眼可以改成localhost.或想寫成 @ IN NS @ 也行!
localhost. IN   A    127.0.0.1
;(這邊的意思是此zone的DNS伺服器主機名稱與 IP 的相互對應,確保localhost可以正確解出127.0.0.1)
應該要有的對應模式如下(有NS就有A) 

jges.edu.tw. IN NS dns1.jges.edu.tw. ;<==這邊的dns1.jges.edu.tw.就是您用來登記在上層單位DNS的名字喔!不能亂改
jges.edu.tw. IN NS dns2.jges.edu.tw.
dns1.jges.edu.tw. IN A 163.19.1.1
dns2.jges.edu.tw. IN A 163.19.1.2
;-----------循序負載分攤功能(round robin),可以用來減輕單一server被查詢到的負擔,也可以做多個異地備援喔!---------
www        IN    A    163.19.1.3
www        IN    A    163.19.1.4
www        IN    A    140.113.40.35       ;<====這邊假設是放到交大做備援
;------------------別名CNAME的用法(盡量用 A來代替CNAME),這邊的3600是獨立的TTL的意思--------------------
www2.jges.edu.tw. 3600 IN A 163.19.1.1
ftp.jges.edu.tw. 3600 IN CNAME www2.jges.edu.tw.
;--Mail Server的用法,不加也可以,不過寄信查詢一定會先查MX,再查A,所以可以用來過濾信件,而不掛MX也會影響效能---
@        IN    MX    10    mail  ;<====這邊的10和20是收寄信順位喔~數字小的會先收到信,如果數字相同就二選一收到
@        IN    MX    20    imap
mail     IN    A    163.19.1.30
imap    IN    A    163.19.1.31
;-----------------------底下是加上子網域dns伺服器的寫法,這邊的子網域是dep1.jges.edu.tw-------------------
$ORIGIN dep1.jges.edu.tw.
                IN NS dns1
                IN NS dns2
dns1         IN A 163.19.1.50
dns2         IN A 163.19.1.51


;*正解檔裡面好多個A,後面的IP到底能不能重覆呢?根據老師的說法是可以的,不過聽說最好不要.
------以上就是基本正解常用的囉,非寫反解檔不可的請看底下直接依樣畫葫蘆囉,差別最大的是PTR和ORIGIN後面接的東東------
vi /var/named/chroot/var/named/jges.rev
$TTL    86400
$ORIGIN 1.19.163.in-addr.apra.
@       IN      SOA     dns1.jges.edu.tw. root.jges.edu.tw. 
                                    (                        
                                      2010072901 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
         IN      NS      dns1.jges.edu.tw.
1       IN      PTR     dns1.jges.edu.tw.         ;這裡有個"1"  也有個PTR ,都是這個反解檔必備的,自己想想為什麼要用1..(提示:反推回來,想想之前那該死的點)
*還有,如果沒有開起來的機器請不要亂弄正反解....會抓不到...冏
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
呃,上面的說明太長了,簡單來說,正解寫出來會變成底下這樣:
vi /var/named/chroot/var/named/jges.fwd
$TTL    86400
$ORIGIN jges.edu.tw.
@ IN SOA dns1 root ( 2010072901 28800 14400 720000 86400 )
; 本領域的 DNS 伺服器的主機名稱與 IP 的對應
@          IN   NS     dns1
@          IN   NS     dns2
dns1      IN   A      163.19.1.1
dns2      IN   A      163.19.1.2         
www        IN    A    163.19.1.3
www        IN    A    163.19.1.4
$ORIGIN dep1.jges.edu.tw.
                IN NS dns1
                IN NS dns2
dns1         IN A 163.19.1.50
dns2         IN A 163.19.1.51
www2 3600 IN A 163.19.1.1
ftp 3600 IN CNAME www2
           IN    MX    10    mail
           IN    MX    20    imap
mail     IN    A    163.19.1.30
imap    IN    A    163.19.1.31
$ORIGIN dep1.jges.edu.tw.
                IN NS dns1
                IN NS dns2
dns1         IN A 163.19.1.50
dns2         IN A 163.19.1.51
  
 換句話說,只有一台主機自己身兼dns、www、mail、ftp等功能,實際可以這樣寫:
vi /var/named/chroot/var/named/jges.fwd
$TTL    86400
$ORIGIN jges.edu.tw.
@ IN SOA dns root ( 2010072901 28800 14400 720000 86400 )
           IN NS    dns
dns      IN A 163.19.1.1
www     IN CNAME    dns
mail      IN CNAME    dns
ftp        IN CNAME    dns    
------------底下是樣品的例子,加不加就看情況啦------- 
sun        IN   A      192.168.1.200
sun        IN   TXT    "The sun solaris OS"
sun        IN   HINFO  "Celeron 1G""Solaris 10"
 
----------------------------------------------------------------------------------------------------------------
特別加映!
關於SOA
Start of Authority。
這個標誌代表著 master/slave 相關的認證、授權資料。 不論你的 DNS 系統有沒有設定 master/slave 的架構,都需要含有這個設定才好。 SOA 後面共帶有三個參數,所以該行為:
 
      [zone] IN SOA [主機名] [管理員 email] ([五組更新時間參數])
 
每個設定項目可以這樣看:
 
    * 主機名:就是 master DNS 的主機名稱,通常填寫本身主機名即可。還是要注意那個小數點的存在與否喔!非常重要!
    * 管理員 email:本來應該是 "root@localhost." 的,不過因為 @ 已經被作為特殊代號 (zone), 所以就用小數點來取代,因此 email 就成為 "root.localhost." 囉!
    * (五組數字):這五個數字分別代表 serial, refresh, retry, expire, ttl。
 
至於那五個數字的意義是這樣的:
 
   1. Serial :是一個序號,但這個序號可被用來作為 slave 與 master 更新的依據。 舉例來說, master 序號為 100 但 slave 序號為 90 時,那麼這個 zone file 的資料就會被傳送到 slave 來更新了。 由於這個序號代表新舊資料,通常建議可以利用日期來設定!
   2. Refresh :除了根據 Serial 來判斷新舊之外,我們可以利用這個 refresh(更新) 命令 slave 多久進行一次主動更新;
   3. Retry :如果到了 Refresh 的時間,但是 slave 卻無法連接到 master 時, 那麼在多久之後,slave 會再次的主動嘗試與主機連線;
   4. Expire :如果 slave 一直無法與 master 連接上,那麼經過多久的時間之後, 則命令 slave 不要再連接 master 了! 也就是說,此時我們假設 master DNS 可能遇到重大問題而無法上線,則等待系統管理員處理完畢後, 再重新來到 slave DNS 重新啟動 bind 吧!
   5. Minimun :這個就像是 TTL 啦!
 
另外,這幾個數字的大小是有限制的!要瞭解:
 
    * Serial <= 2^32 = 4294967296
    * Refresh >= Retry * 2
    * Refresh + Retry < Expire
    * Expire >= Retry * 10
    * Expire >= 7Days
-------------------------------------------------------------------------------------------------------------------------------
其他符號一覽表:
 
 NSname server 的縮寫,這個標誌的參數是:
      [zone] IN NS [主機名稱]
注意, NS 後面接的一定是主機名稱!代表的意思是說:『這個 zone 的查詢請向後面這部主機要求』的意思。 所以,如果這個 zone 有兩部以上的 DNS 伺服器負責時,那就需要寫兩個 NS 了!而 NS 後面接的主機名稱要有 IP 的對應啊!因此就需要 A 這個標誌了!
 Aaddress,參數是:
      [hostname] IN A [IP]
意思是說該部主機的 IP 對應之意!也是最常用的一個標誌!
 MXmail exchanger的簡寫,參數是:
      [hostname] IN MX [順序] [主機名稱]
注意,這個 MX 與 mail server 有關,沒有 mail server 的朋友可以省略這個標誌,但是如果你的領域內有 mail server 時,就必需要設定這個 MX 才好。MX 的用途是在於『郵件轉遞』或者是經由上層郵件主機備份的一個機制, 後面設定的那個主機名稱通常是你的上游郵件主機, 設定區域中擔任郵件伺服器的主機,所有要送往那部機器的 mail 都要經過 mail exchanger 轉送。而數字則是該主機郵件傳遞時的優先次序,此值越低表示有越高的郵件處理優先權。
如果不知道如何設定,通常建議直接設定成 mail server 主機名稱即可
 CNAMEcanonical name,別名. 顧名思義,這個標誌在建立『主機別名』的啦!參數為:
      [hostname] IN CNAME [主機名稱]
注意一下, CNAME 後面接的是主機名稱。因為有好幾部主機名稱都對應到同一個 IP 上頭, 你當然可以針對每個主機名稱給予一個 A ,不過如果未來要改 IP 時,你就得改好幾個啦! 此時改為 CNAME 來處理就很簡單。
 PTR pointer,定義某個 IP 對應的 domain name,即將 IP 位址轉換成主機的FQDN。
 TXT 這個東西在進行『說明』而已!亦即是前面那部主機的一些資訊。 特別注意的是,沒事的話,『資訊不要寫得太詳細,有的時候甚至應該要寫些錯誤的訊息!』 為什麼呢?cracker沒事做嗎?呃,不過這東西有另一個信件上的安全應用,請看底下DNS其他應用,SPF的說明。
 AAAA 不要懷疑!用法和上面的A相同,不過是傳說中的 IPv6 啊啊阿啊啊!
------------------------------------------------------------------------------------------------------------------------------------------
寫在最後面,一般單位到這裡就做完正解了,反解就丟給上層單位那些領更多錢或更厲害的人去做吧!(攤手)
呃,當然,如果很不幸的網管人員,還是有空弄一下反解比較好囉~
 
啟動DNS很簡單,輸入
/etc/init.d/named start  (或restart)
但是這個啟動可不見得是成功的!因為dns的上層更新速度和設定的TTL有極大關係,所以可能真要等半天一天的才能看到實際的後果!還有,我們除了用nslookup和dig指令可以檢測外,鳥哥說:『務必』要去 /var/log/messages 觀察過才行!

dig 網址 any       <===追蹤,找出與該網址查詢結果有關的dns紀錄都丟出來
dig +trace 網址   <===追蹤,找出與該dns查詢經過的路徑
dig @網址 網址   <===指定在第二個網址上查詢第一個網址的dns紀錄
traceroute 網址   <===追蹤,找出經過路徑,並顯示正反解(只寫出IP卻沒名字就是沒設反解啦~)

呃,還有一個很棒的套件叫做「dnstop」,長得很像內建用來觀察系統流量的「top」,可以用來做出多種不同的觀測喔!要裝!網址:http://dns.measurement-factory.com/tools/

--------------------------DNS其他的應用,SPF(需要重新編譯),請參考http://phorum.study-area.org/viewtopic.php?t=18000------------
SPF(Sender Policy Framework):
主要使用dns的TXT記錄說明此網域的發信來源有哪些
詳情請查閱RFC 4408

2010年10月13日 星期三

2010年10月12日 星期二

Ubuntu的unzip出現windows中文檔案的亂碼?!網路上的最佳解法-重新編譯

經過google之後,大多數人採用的第一種應急措施就是不使用Ubuntu內帶的Unzip程式,改用如7-Zip、PeaZip等其他壓縮程式來解決這問題(最快又穩當的方法就是使用wine然後外掛winzip或winrar囉!),總之,能解決該死的Big5問題就是好方法,所以也請大家多多愛用Unicode來存檔案 :)

個人最常用的解法是第一個,其他的作法就請自行參考:
-----------------------------------------作法一-------------------------------------
以下文章來源:http://louis3c.blogspot.com/2009/08/ubuntu-big5-convert-to-utf-8.html

在Ubuntu下要將內文為Big5轉換為UTF-8可以使用iconv

1.開啟終端機(Terminal)

2.輸入下列命列
iconv -f big5 -t utf8 src_filename -o output_filename

src_filename:big5編碼檔案
output_filename:utf8編碼檔案
------------------------------------------作法二--------------------------------------
以下文章來源: http://blog.yam.com/kenshinn/article/3161348

原因發生是在windows下winzip對zip檔的type設定錯誤,
linux下暫時先用leeym 大大的 patch來解決
以下是以ubuntu為例:

1.取得unzip的source
#apt-get source unzip
接著會產生 unzip-版本的目錄(筆者測試時為unzip-5.52)

2.修改unzpriv.h
找到_OEM_INTERN
將此區段中,
*p = native((*p & 0x80) ? oem2iso[*p & 0x7f] : *p);}
改為
*p = native(*p);}

3.重新編譯unzip
#make -f unix/Makefile generic
產生的unzip檔案,再換掉原來的/usr/bin/unzip
如此unzip才能正確解出屬於該檔案編碼的檔案

即使做了上述修改
unzip在utf8下解出來的依然是亂碼
但修正過後的亂碼已經可以用convmv來處理了


----------------------------------------作法三-----------------------------------------
以下文章來源:http://plog.longwin.com.tw/news-unix/2008/07/15/convmv_utf8_big5_convert_linux_2008


Linux: 轉換 檔案名稱 的編碼 convmv (UTF-8/Big5 互轉)



當整個目錄裡面都是 Big5 的檔案, 然後要全部轉成 UTF-8 的時候, 想到就很累, 這就是當初要把 Terminal 都轉換成 UTF-8 其中一個障礙.



不過那時候找到一隻 script, 程式寫法大概就是 echo 現在的檔名, 然後用 iconv 轉成 UTF-8, 再 mv 把檔名換掉.



程式如下: (已不知來源為何, 若有人知道, 還請告知此程式來源, 將立即補上)



#!/bin/sh

# this script changes big5 chinese file/directory name to utf8 file/directory name.

# It will recursive.

# it can handle the file name containing space.

# when you use this script, please change to the directory that you want to transfer files' name.

# then execute like "~/ic2"

# i hope this script will not impact anything that will crash your system.

# this script works fine for me.



DIR="."



for I in * ; do

    echo "check... $I"

    f=`echo "$I" | iconv -f big5 -t utf8`

    if [ $? = 0 ]; then

        if  [ "$I" != "$f" ];then

            echo "$f"

#            cp -rv "$I" ~/cbackup/

            mv -v "$I" "$f"

            if [ $? = 0 ];then

                rm -rfv ~/cbackup/"$I"

            else

                echo "$f"

                exit 1;

            fi

        else

            echo "skip $I"

        fi

    else

        echo "skip $I"

    fi

done

echo "ok!"



#following from cynosure

for J in * ; do

    if [ -d "$J" ]

    then

        path=`pwd`

        echo "dir ""$J" #where am i

        cd  "$path""/""$J"

        ~/bin/ic2

        cd "$path"

    fi

done

ls *

exit 1;


此 script 我有做過一些修改, 會直接執行, 不會進行備份或測試的動作, 所以建議不熟先不要亂玩.. :P



我有另外將此 script 再 cp, 主要是來做還原等等的 script, 主要都是 copy 後修改 iconv, 來做事後處理, 例如:



  • iconv -f big5 -t utf8

  • iconv -f utf8 -t big5

  • iconv -f gb2312 -t utf8

  • iconv -f utf8 -t gb2312



不過現在有另外一隻更方便的程式囉~ 就是下述:




這隻主要是隻 Perl script, 該做 轉換/備份/測試/偵測環境 等等, 都寫的蠻完整的.



convmv 轉換編碼指令



  • convmv -f big5 -t utf-8 -r --notest *

  • -f big5: 從 Big5 編碼轉換 (不過標準應該是要寫 big5-eten, 但是我測試 big5 也可以動. :P)

  • -t utf-8: 轉換編碼到 UTF-8

  • -r: 遞迴的將目錄下的所有檔名都做轉換

  • --notest: 如果不下這個, 一切動作都只是測試, 會直接將轉換前和轉換後的檔名列給你看, 這加下去, 才會實際轉換檔名.

  • *: 所有檔案



其他參數



  • --list : 列出所有可用的編碼

  • --unescape : 轉換檔名中 %xx 這種 16 進位的編碼 (mv "./a%20x.jpg" "./a x.jpg")

  • --lower : 將所有檔名都轉小寫(ex: convmv --lower LOWER.txt)

  • --upper : 將所有檔名都轉大寫

  • -i : 互動模式, 轉換前會先經過 y/n 確認

  • 更多詳細可 man convmv 或 convmv --help, 除此之外, 可以另外再搭配 rename 做些其他應用~ :)


2010年9月29日 星期三

openoffice的合併列印資料庫不能用?!(實做於Ubuntu 10.04、openoffice3.2)

呃,這一個問題,因為合併列印的功能很重要,想不到google了老半天竟然都沒有,最後只好依據自己的直覺:

發現網路上實做的範例都是在已安裝好openoffice Base的情況下進行合併列印的操作,
於是也將Ubuntu 10.04原本沒有預設安裝的openoffice Base加進來,結果!在合併列印選擇資料庫的地方就正常了!

所以,如果在使用openoffice合併列印選擇資料庫時有問題,請安裝Base到系統裡,試看看吧!!


2010年9月27日 星期一

電腦的Language學習資源

電腦的Language

很棒的影音教學站台,各種語言都有  http://showmedo.com/
蒐集許多語言實用工具的範例原始碼網站 http://www.example-code.com

Java


教育用的工具資源 :
     完全不懂的人用的 Greenfoot               http://www.greenfoot.org/index.html
     對程式懂一點點的人用的 BlueJ            http://www.bluej.org/index.html
     對程式更有興趣的人用的 NetBeans IDE的BlueJ外掛套件  http://edu.netbeans.org/bluej/ 

JavaScript
JavaScript-入門觀念基礎教學
原作者: 李忠憲sean@tp.edu.tw ,2004/9/10初稿 2005/11/17修改

Python

python官方網站   http://www.python.org/
python的其中一種GUI選擇 wxpython  http://www.wxpython.org/

python的HOWTOs http://docs.python.org/howto/index.html
python的Tutorial教學文件    http://docs.python.org/tutorial/index.html
python的Tutorial教學文件(中文) http://www.python.tw/ebook/Guido%20van%20Rossum/tut.html


------------------------------------------------------------------------------------------------------------------
IPython的規避序列
\newline              忽略
\\                        倒斜線
\'                        單引號
\"                        雙引號
\a                       Bell字符
\b                       退格字符
\f                        換頁字符
\n                       換列字符
\r                        回行首
\t                        水平跳格
1.在IPython當中使用!置於字首可以通用shell的功能 ,例如:!netstat -lptn
2.使用%置於字首可以呼叫magic()的功能
3.使用alias可以建立系統指令的別名,例如:alias nss netstat -lptn
4.變數傳遞給shell,可以在前面加上$符號,例如目前已有一個變數為user,傳遞變數至shell可以寫成像這樣: grep $user
5.使用cd -<TAB> 可以迅速的取得使用過的目錄歷程。


python的GUI

相關各類型的Python 圖形使用者介面程式設計架構可以參見:  http://job.achi.idv.tw/wap/index-wap2.php?p=1770
其中一段話是重點:雖然有很多其他的技術也積極提供Python的繫結,但是Python架構所依據的主要跨平台的技術包括 Gtk、 Qt、 Tk 及 wxWidgets  ,因此,我們可以很快找到努力研究的目標有哪些.



----------------------------------以下是部份架構的說明---------------------------------------------
Tkinter Python的GUI架構有很多方式可以使用,首先是預設安裝的Tkinter,相關教學文章與介紹:
完成TKinter程式需要做捯下面三件事情:
import Tkinter #將TK模組載入
root=Tkinter.Tk() #建立主視窗
root.mainloop() #建立事件迴圈


環境設定:
更改c:\Python23\Lib\site.py(因中文在windows要用unicode):

encoding = 'ascii'
改成
encoding = 'mbcs

---------------------------------------------------------------------------------------------
----------------------------------------wxPython--------------------------------------
wxPython  以下資料來自於http://job.achi.idv.tw/wap/index-wap2.php?p=2082
wxPython 是C++的 WxWidgets(以前是 WxWindows)類別函式庫及Python的混和物,wxPython可以在http://www.wxpython.org/ 發現以及他自己的wiki:http://wiki.wxpython.org/, ShowMeDo 有收集wxPython視訊簡介。

wxPython 指南是wxPython工具集完整的教學,可以在 zetcode.com 找到。

IgorTamara:在好的linux版本中WxPython容易安裝,只要:apt-get install libwxgtk2.4-python 或

MythDebunking: WxPython 很難安裝在Unix上,你需要正確的GTK、WxWidgets 及WxPython版本。

        wxPython的影音教學,很不錯(英文)  http://showmedo.com/videotutorials/series?name=PythonWxPythonBeginnersSeries




--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



以下內容來自於
wxPython基礎視窗程式 http://www.openfoundry.org/en/tech-article/106
Thursday, 11 January 2007 04:27 Written by 紀博文 

基礎視窗程式概念

在電腦的操作介面上,大致分為兩種。即 Command Line Interface(CLI) 命令列介面與 Graphical User Interface(GUI) 圖形使用者介面。
在命令列的模式中,所有的動作,像是複製檔案、搬移檔案、建立目錄、刪除目錄、執行程式等,幾乎都是在一塊黑色
背景的螢幕上,以輸入指令方式操作電腦。
然而,命令列介面,卻是在圖形使用者介面普及之前,最為普及的電腦使用者介面。
而在圖形使用者介面中,則透過滑鼠進行操作。

Figure 1. Command Line Interface(CLI) 命令列介面
Figure 2. Graphical User Interface(GUI) 圖形使用者介面

通常來講,一個視窗的組成類似積木的堆疊,主要包括「Frame」(框架)、「Panel」(面板)、「Controls」(控制項)。

一般常見的 Frame 中,會有「MenuBar」(選單列)、「ToolBar」(工具列)、「StatusBar」(狀態列)和「Panel」(面版)。

  • MenuBar(選單列):為下拉式選單,通常所有應用程式的功能,都可在選單列中找到。
  • ToolBar(工具列):將各種常用的功能,以圖示的方式展現出來,方便取用。
  • StatusBar(狀態列):用來顯示應用程式的狀態訊息。
  • Panel(面板):用來配置視窗操作時,需要使用的各種 Controls(控制項)。

    Panel 是用來放置各種 Controls(控制項)的地方。
    而 Controls(控制項)指的就是各種視窗控制項,像常看到的有「Button(按鈕)」、「TextCtrl(文字方塊)」。
  • IPython備忘

    Python的規避序列
    \newline              忽略
    \\                        倒斜線
    \'                        單引號
    \"                        雙引號
    \a                       Bell字符
    \b                       退格字符
    \f                        換頁字符
    \n                       換列字符
    \r                        回行首
    \t                        水平跳格

    1.在IPython當中使用!置於字首可以通用shell的功能 ,例如:!netstat -lptn
    2.使用%置於字首可以呼叫magic()的功能
    3.使用alias可以建立系統指令的別名,例如:alias nss netstat -lptn
    4.變數傳遞給shell,可以在前面加上$符號,例如目前已有一個變數為user,傳遞變數至shell可以寫成像這樣: grep $user
    5.使用cd -<TAB> 可以迅速的取得使用過的目錄歷程。


    2010年9月24日 星期五

    python的GUI

    相關各類型的Python 圖形使用者介面程式設計架構可以參見:  http://job.achi.idv.tw/wap/index-wap2.php?p=1770

    其中一段話是重點:雖然有很多其他的技術也積極提供Python的繫結,但是Python架構所依據的主要跨平台的技術包括 Gtk、 Qt、 Tk 及 wxWidgets  ,因此,我們可以很快找到努力研究的目標有哪些.





    ----------------------------------以下是部份架構的說明---------------------------------------------

    Tkinter Python的GUI架構有很多方式可以使用,首先是預設安裝的Tkinter,相關教學文章與介紹:





    完成TKinter程式需要做捯下面三件事情:
    import Tkinter #將TK模組載入
    root=Tkinter.Tk() #建立主視窗
    root.mainloop() #建立事件迴圈


    環境設定:
    更改c:\Python23\Lib\site.py(因中文在windows要用unicode):

    encoding = 'ascii'
    改成
    encoding = 'mbcs



    ---------------------------------------------------------------------------------------------
    ----------------------------------------wxPython--------------------------------------

    wxPython  以下資料來自於http://job.achi.idv.tw/wap/index-wap2.php?p=2082




    wxPython
    是C++的 WxWidgets(以前是
    WxWindows)類別函式庫及Python的混和物,wxPython可以在http://www.wxpython.org/
    發現以及他自己的wiki:http://wiki.wxpython.org/, ShowMeDo 有收集wxPython視訊簡介。






    wxPython 指南是wxPython工具集完整的教學,可以在 zetcode.com 找到。






    IgorTamara:在好的linux版本中WxPython容易安裝,只要:apt-get install libwxgtk2.4-python 或






    MythDebunking: WxPython 很難安裝在Unix上,你需要正確的GTK、WxWidgets 及WxPython版本。




            wxPython的影音教學,很不錯(英文)  http://showmedo.com/videotutorials/series?name=PythonWxPythonBeginnersSeries







    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




    以下內容來自於

    wxPython基礎視窗程式 http://www.openfoundry.org/en/tech-article/106

    Thursday, 11 January 2007 04:27 Written by 紀博文 


    基礎視窗程式概念


    在電腦的操作介面上,大致分為兩種。即 Command Line Interface(CLI) 命令列介面與 Graphical User Interface(GUI) 圖形使用者介面。


    在命令列的模式中,所有的動作,像是複製檔案、搬移檔案、建立目錄、刪除目錄、執行程式等,幾乎都是在一塊黑色


    背景的螢幕上,以輸入指令方式操作電腦。


    然而,命令列介面,卻是在圖形使用者介面普及之前,最為普及的電腦使用者介面。


    而在圖形使用者介面中,則透過滑鼠進行操作。



    Figure 1. Command Line Interface(CLI) 命令列介面


    Figure 2. Graphical User Interface(GUI) 圖形使用者介面




    通常來講,一個視窗的組成類似積木的堆疊,主要包括「Frame」(框架)、「Panel」(面板)、「Controls」(控制項)。


     


    一般常見的 Frame 中,會有「MenuBar」(選單列)、「ToolBar」(工具列)、「StatusBar」(狀態列)和「Panel」(面版)。



  • MenuBar(選單列):為下拉式選單,通常所有應用程式的功能,都可在選單列中找到。




  • ToolBar(工具列):將各種常用的功能,以圖示的方式展現出來,方便取用。




  • StatusBar(狀態列):用來顯示應用程式的狀態訊息。




  • Panel(面板):用來配置視窗操作時,需要使用的各種 Controls(控制項)。


     


    Panel 是用來放置各種 Controls(控制項)的地方。


    而 Controls(控制項)指的就是各種視窗控制項,像常看到的有「Button(按鈕)」、「TextCtrl(文字方塊)」。





  • 2010年9月22日 星期三

    ubuntu上遠端使用Microsoft的OS

    第一,請打開port:3389
    第二,輸入sudo apt-get install rdesktop
    第三,使用已經完成的rdesktop工具:rdesktop 192.168.x.x
    ok啦!

    其他參數如下:
    -f 全螢幕
    -a 16色
    -u xxxx   使用用戶名稱xxxx登入
    -p xxxx   使用用戶密碼xxxx登入
    -r clipboard:PRIMARYCLIPBOARD    讓兩邊電腦的剪貼簿可以互通,重要啊!
    -r disk:wj=/home/magicgod         mount上一台磁碟,功能很強大




    --------------------以上,以下,皆參照http://4i4u.com/blog/rdesktop-ubuntu-windows/網站-------------------
    更多参数:

    -u xxxxxx 登录用户,可选
    -p xxxxxx 登录密码,可选
    -r clipboard:PRIMARYCLIPBOARD 重要,剪贴板可以与远程桌面交互
    -a 16 颜色,可选,不过最高就是16位
    -z 压缩,可选
    -g 1024×768 分辨率,可选,缺省是一种比当前本地桌面低的分辨率
    -P 缓冲,可选
    -r disk:wj=/home/magicgod 映射虚拟盘,可选,会在远程机器的网上邻居里虚拟出一个映射盘,功能很强,甚至可以是软盘或光盘
    -r sound:off 关闭声音,当然也可以把远程发的声音映射到本地来。

    重定向:

    这时才发现它原来也可以将本地磁盘带到远端,而且连中文文件名也支持。只要加上 -r 参数就可以了。它除了可以将本地磁盘带到远端以外,还支持串口和打印机,这下 Windows 上远程桌面客户端的功能在 Linux 上都齐了。-r 参数的格式如下:
    -r comport:COM1=/dev/ttyS0 // 将串口 /dev/ttyS0 重定向为 COM1
    -r comport:COM1=/dev/ttyS0,COM2=/dev/ttyS1 // 多个串口重定向
    -r disk:floppy=/mnt/floppy // 将 /mnt/floppy 重定向为远程共享磁盘 ‘floppy’
    -r disk:floppy=/mnt/floppy,cdrom=/mnt/cdrom,root=/,c=/mnt/c // 多个磁盘重定向
    -r clientname= // 为重定向的磁盘设置显示的客户端名称
    -r lptport:LPT1=/dev/lp0 // 将并口 /dev/lp0 重定向为 LPT1
    -r lptport:LPT1=/dev/lp0,LPT2=/dev/lp1 // 多个并口重定向
    -r printer:mydeskjet // 打印机重定向
    -r printer:mydeskjet=”HP LaserJet IIIP” // 打印机重定向
    -r sound:[local|off|remote] // 声音重定向


    2010年9月9日 星期四

    軟體如何中文化?

    常用中文化軟體:


    Poedit  http://www.poedit.net/



    兩個寫的很清楚的內容網站(意思就是本人不想多加補充啦~)


    自由軟體正體中文化工作指引   https://docs.google.com/View?id=df5pz2jt_12cwtxwfqn


    ubuntu社群的自由軟體中文化工作指南 http://wiki.ubuntu-tw.org/index.php?title=%E8%87%AA%E7%94%B1%E8%BB%9F%E9%AB%94%E4%B8%AD%E6%96%87%E5%8C%96%E5%B7%A5%E4%BD%9C%E6%8C%87%E5%8D%97


    2010年9月8日 星期三

    軟體如何中文化?



    軟體中文化相關資訊:http://wiki.ubuntu-tw.org/index.php?title=%E8%87%AA%E7%94%B1%E8%BB%9F%E9%AB%94%E4%B8%AD%E6%96%87%E5%8C%96%E5%B7%A5%E4%BD%9C%E6%8C%87%E5%8D%97
    ------------------------------------------------------------------------------------


    常用中文化軟體:

    Poedit  http://www.poedit.net/


    以下內容來源為自由軟體正體中文化工作指引   https://docs.google.com/View?id=df5pz2jt_12cwtxwfqn
    前言

    本文目的乃是希望為目前正體中文翻譯環境設立一個共同的翻譯準則。如有任何建議,您可以在 chinese-l10n 網上論壇提出,也竭誠歡迎您加入我們的行列。
    對於翻譯者,建議您列印本文件,以便在翻譯時隨時查閱。

    一、工作流程

    不同的翻譯項目有不同的工作流程,大致分為準備、協調、翻譯和提交。

    1. 準備

    • 我們的原則是品質優先,強烈不贊成翻譯自己不熟悉的軟體或文件
    • 詳細閱讀本文件和全部與工作相關和要翻譯內容相關的文件
    • 最好準備一本英語詞典或者使用線上詞典以方便查閱生字,例如:Yahoo!奇摩字典;至於術語、縮寫等請先查閱Wikipedia 文章、以 Google 搜尋、以及參考 Answers.com 上的內容等
    • 使用線上翻譯平台的 (如 Launchpad) 翻譯者,在瞭解注意事項與翻譯相關格式後便可以開始進行翻譯
    • 不使用線上翻譯平台的,請依照各專案所指定的方法取出源始碼、取得 PO 或 POT 檔,然後安裝指定的工具並開始翻譯 (如要翻譯 PO 檔,強烈建議您安裝 gettext 工具組)

    2. 協調

    協調工作的主要目的是防止多個人在互不知情的情況下同時翻譯相同的內容,一方面導致了重複勞動,另一方面也造成了合併的困難。
    通 常情況下的協調工作,是透過向專案翻譯小組的郵遞論壇寄送電子郵件來說明你想要負責的工作項目。若要翻譯的軟體或文件不存在,則你將自動成為其負責人並可 以開始進行翻譯。若已經有人在進行翻譯,則此後需要與之聯繫以商定分工,請在寄送認領郵件到郵遞論壇時抄送給原負責人一份,一周內無回復則視為同意你的請 求。開始翻譯前若需要相關的帳號應提出申請。
    GNOME 由於使用了 Damned-Lies 網站,請直接使用網站功能即可;至於線上翻譯,如 Launchpad、Tryneeds 等,暫時還沒有進行協調工作的有效方式。

    3. 翻譯

    A. PO 檔翻譯流程

    (1) 關於 GNU Gettext
    GNU Gettext 是 GNU 本地化和國際化的函式庫,即 GNU Localization (l10n) & Internationalization (i18n) Library,是自由軟體國際化支援的常用工具。

    (2) 開始翻譯
    翻譯是我們中文化工作中的重點,在開始翻譯前請詳細閱讀本文以下章節中的各項要求,以確保品質。
    PO 檔的翻譯過程中不要對 msgid 該列做任何修改,即使其中有明顯錯誤也不行,否則合併翻譯到主程式時將會發生問題。你在英文字元串上所做的變更將會喪失,且你的翻譯也不會被合併入內。在遇到來源文件有問題時,最好的辦法是向軟體開發者提交臭蟲報告。
    本文中關於 PO 檔的各項命令都假定閱讀者已經安裝了 GNU/Linux 基本系統、gettext 工具組與 intltool 工具組,或者在其他平台上安裝了相應的程式。

    (3) 檢查翻譯格式
    PO 檔翻譯後請使用以下指令進行格式檢查:
    ----------------------------------------------------------------
    msgfmt -- statistics - cv zh_TW . po
    ----------------------------------------------------------------
    執行以上命令後會在當前目錄下產生一個名為 messages.mo 的檔案,該檔案便是編譯後供機讀之用。

    (4) 複審翻譯
    使用 PO 檔的,直接複審 PO 檔,並建議將 PO 檔編譯成 MO 檔,接著複製到相應程式的目錄下來進行實測,以確保翻譯是否有誤。
    至於文件,請先構建文件並接著精讀結果文件。
    如果發現問題,請回到「開始翻譯」步驟,並修正問題。

    (5) 格式化翻譯
    因為不同的翻譯工具可能使用了不同的格式,比如標準 gettext 格式、poedit 格式等。強烈建議所有翻譯者使用標準 gettext 格式,可以使用標準的 POT 檔與 PO 檔進行合併來達到此目的:
    ----------------------------------------------------------------
    msgmerge -- no - wrap -U zh_TW . po example . pot ----------------------------------------------------------------

    B. 線上翻譯注意事項

    (1) Launchpad
    • Launchpad 平台目前提供「線上翻譯」與「PO 檔翻譯」兩種方式進行翻譯。線上翻譯時請注意以下幾點並遵照本文的翻譯要求;PO 檔翻譯請參照 PO 檔翻譯流程。
    • 由於 Launchpad 沒有校閱的機制,只要是翻譯團隊的成員皆擁有所有翻譯的決定權,所以在翻譯時只要遇到不清楚原意的條目,請將 "Someone should review this translation" 打勾後再進行 "Save & Continue" 的提交動作。與其翻譯錯誤讓瞭解中文與英文的人都看不懂,更希望能保留英文起碼讓懂英文的人瞭解。
    • 除 了沒有校閱機制之外,Launchpad 也不會上傳該平台上的翻譯成果給非使用 Launchpad 平台的上游翻譯專案,這是目前最為人詬病的缺點。因此,使用 Launchpad 進行翻譯時,請優先翻譯以 Launchpad 平台作為其翻譯來源的軟體套件專案。至於那些來自非 Launchpad 平台的上游翻譯,請想要翻譯的人務必與上游保持同步狀態。
    • Ubuntu 專案使用 Launchpad 平台作為其翻譯來源,Ubuntu 團隊自己開發的與經過他們修改的軟體套件,都可以直接進行翻譯而無須保持與上游同步。這些套件的清單可以由此頁面中的 "Ubuntu Specific GUI Packages" 一節查閱。

    (2) Tryneeds
    • Tryneeds 使用管理員機制以控管翻譯品質,所有翻譯都需要經過管理員的審核才會提交到上游。因此使用 Tryneeds 進行翻譯時,只要遵照本文的翻譯要求即可。

    (3) Transifex
    • Transifex 目前提供兩種方式進行翻譯:「線上翻譯」與「PO 檔提交」。線上即時翻譯功能還在開發中,時常在送出翻譯後卻無法通過系統驗證,目前尚不建議使用。PO 檔提交請遵照 PO 檔翻譯流程。

    4. PO 檔提交

    (1) 非翻譯平台
    不 同項目提交翻譯的方式不完全相同,多數情況下可以通過翻譯小組的郵遞論壇進行提交,如果您有相關項目的翻譯管理帳號則請直接提交。如果沒有負責的小組也沒 有相關的帳號,請把您的翻譯發送到對應項目的翻譯者郵遞論壇 (一般名稱類似 xxx-translators、i18n、intl、l10n;若沒有翻譯者郵遞論壇則發送到文件郵遞論壇,一般名稱類似為 xxx-doc;若還是沒有則發送到開發者郵遞論壇,一般名稱為 xxx-dev、devel、developer),或者通過填寫一個 Bug 的方式進行提交。
    注意:在請別人代為提交到 TP 項目時 Last-translator 不會是您,因為 TP 要求這項需要是提交者的名字和郵件地址,您的訊息將會出現在檔頭註解的版權列中。
    提交後請根據情況再發送一封郵件來取消原來協調翻譯時的佔用聲明。

    (2) 翻譯平台
    各個翻譯平台的提交方式都不同,請遵照各平台規定。

    二、基本要求

    1. 準確表述原文的意思
    2. 中文應該意思清晰且符合中文表達習慣
    3. 原文如果表達不清晰,中文應該意譯,並且應根據上下文和註解進行推斷並填補相應的訊息。例如 "print error" 不該直譯為「列印錯誤」,而是「列印發生錯誤」以免造成混淆
    4. 情況 3 不能太多
    5. 對相同術語或短語的翻譯,必須前後一致
    6. 使用「您」而不是「你」
    7. 不要使用機器翻譯的成果來提交,也就是說您可以使用 Google Translate 來幫助您理解內容,但是不能不經考慮就把其自動翻譯的結果放在翻譯裡

    三、格式要求

    1. 文件編碼格式

    目前的翻譯文件一般使用 UTF-8 編碼。所以請使用支援 UTF-8 編碼的編輯工具或者文字編輯器進行翻譯,同時需要注意文件頭的 "charset" 項設定正確。如果在編碼格式上遇到問題,請向翻譯組相關郵遞論壇發送郵件以尋求幫助。
    可以使用 iconv 或者 msgconv 指令進行轉換,以下例子為轉換 big5 --> utf-8:
    ----------------------------- -----------------------------------
    iconv -f 來源文件編碼 -t 目標文件編碼 來源文件>目標文件

    iconv -f big5 -t utf-8 inputfile > outputfile
    ----------------------------------------------------------------
    或者: ----------------------------------------------------------------
    msgconv -t 目標文件編碼 來源文件 -o 目標文件
    msgconv -t utf-8 inputfile -o outputfile ---------------------------------------------------------------- 

    2. 關於檔頭

    下面是一個使用 msginit 工具由 POT 檔產生的 PO 檔初始檔頭,使用了 msginit 的 --no-translator 選項:
    -------------------------------------------------- --------------
    # Chinese translations for PACKAGE package
    # traditional Chinese translation for PACKAGE.
    # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
    # This file is distributed under the same license as the PACKAGE package.
    # Automatically generated, 2009.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&component=general\n"
    "POT-Creation-Date: 2009-08-20 17:27+0200\n"
    "PO-Revision-Date: 2009-08-20 17:27+0200\n"
    "Last-Translator: Automatically generated\n"
    "Language-Team: none\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
    ----------------------------------------------------------------

    編輯後的檔頭應為這樣,綠色為實際文件中需要修改的,紅色為註解: 
    ----------------------------------------------------------------
    # Chinese translations for empathy package <--將 PACKAGE 改為要翻譯的軟體名,本例中為 empathy
    # traditional Chinese translation for empathy<--將 PACKAGE 改為 empathy
    # Copyright (C) 2003, 2004, 2005, 2009, 2010 Free Software Foundation, Inc.
    <--填入翻譯年份,若年份有多個,應當以逗號分割多個數字而不是使用某年至某年的方式
    # This file is distributed under the same license as the empathy package.
    <--此處 PACKAGE 替換方法同上
    # Abel Cheung <abel@oaka.org>, 2003, 2004.
    # Chao-Hsing Liao <j_h_liau@yahoo.com.tw>, 2005.
    # Tryneeds translation team, 2009.
    # Cheng-Chia Tseng <pswo10680@gmail.com>, 2010.
    <--此處填入您自己的訊息,格式參見上面,有的 PO 編輯器會自動更新此項,有多個年份的以逗號分隔列出
    #
    #, fuzzy <--使用 msginit 產生的 PO 檔中沒有這行,如果直接用 POT 檔進行翻譯請務必在繼續前刪除此行
    msgid ""
    msgstr ""
    "Project-Id-Version: empathy master\n" <--此處 PACKAGE 替換方法同上,VERSION 應為所對應的軟體版本
    "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&component=general\n" <--此行一般不需修改,即使有的文件在產生後此項為空
    "POT-Creation-Date: 2009-08-20 17:27+0200\n" <--此行一般不需修改,合併新的 POT 檔時會自動更新
    "PO-Revision-Date: 2010-08-24 22:25+0800\n"
    <--填入翻譯完成的時間,PO 編輯器一般能自動更新此項, +0800 代表加 8 時區
    "Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n" <-- 改成你的名字和電子郵件地址
    "Language-Team: Chinese (traditional) <chinese-l10n@googlegroups.com>\n"
    <--以上這行改成你所參與的翻譯小組郵遞清單位址 ,若沒有小組就填寫可以聯繫到你的電子郵件地址
    "MIME-Version: 1.0\n" <-- 不要進行更改
    "Content-Type: text/plain; charset=UTF-8\n"
    <--應確保上行的編碼和文件編碼均為 UTF-8,若不是則需要將文件編碼轉換為 UTF-8 後再將此處更改為 UTF-8
    "Content-Transfer-Encoding: 8bit\n" <-- 不要進行更改
    "Plural-Forms: nplurals=2; plural=n!=1;\n" <--正體中文若考慮代名詞複數變化便可以這樣填,有的文件可能無此行
    ----------------------------------------------------------------

    修改完文件頭以後接著就是實質性的翻譯了,PO 檔的格式是一句 msgid 跟著一句 msgstr,以 "#" 開頭的列是註解。您需要做的是把 msgid 中的英文翻譯成中文寫到 msgstr 中。例如:
    ----------------------------------------------------------------
    #: app/floating_sel.c:198
    msgid ""
    "Cannot create a new layer from the floating\n"
    "selection because it belongs to a\n"
    "layer mask or channel."
    msgstr ""
    "無法從浮動選擇區產生新的\n"
    "圖層,因為它屬於一個\n"
    "圖層遮罩或色版。"

    #: ../libgimp/gimpbrushselectbutton.c:170
    msgid "Brush Selection"
    msgstr "筆刷選擇"
    ----------------------------------------------------------------

    3. 關於複數形式

    由於某些語言的單複數變化極為複雜,為了應對這種局面,符合國際化標準,gettext 通過讀取 PO 檔頭部如下一行中的訊息來正確顯示不同單複數的譯文:
    ----------------------------------------------------------------
    "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
    ----------------------------------------------------------------

    nplurals 表示譯文單複數變化形式的總數量,它是一個正整數。plural 表示原文中表示「n 個」的概念時應用的複數形式,這裡是一個非負整數,可以是一個 C 語言表達式的值,該值必須小於 nplurals 且非負。
    雖然中文裡的名詞一般沒有單複數區分,也就是說沒有複數變化,然而中文的代名詞是有區分單複數的!例如「他/她」與「他們/她們」;以及「這個」與「這些」。

    一般來說應該設為:
    ----------------------------------------------------------------
    Plural-Forms: nplurals=2; plural=(n>1);
    ----------------------------------------------------------------
    含義是單複數一共有兩種 (單數與複數),在所指對像數量超過一個的時候使用複數。

    又如一些語言中只有在所指對像數量不是一的時候使用複數 (英語的預設設定):
    ----------------------------------------------------------------
    Plural-Forms: nplurals=2; plural=(n!=1);
    ----------------------------------------------------------------
    含義是單複數一共有兩種 (單數與複數),僅在所指對象數量不是一的時候使用複數。

    以上這兩種表示法其意義與結果都是相同的,因此都可以採用。

    如果不管中文裡的代名詞單複數變化,可以設定為:
    ----------------------------------------------------------------
    Plural-Forms: nplurals=1; plural=0;
    ----------------------------------------------------------------
    含 義是譯文的所有單複數形式只有一種,所有形式使用一種翻譯。若使用這種複數形式,當 PO 檔的訊息字串出現代名詞變化時便無法處理單數代名詞,無法完整表達譯文。然而目前 Launchpad 與 Tryneeds 都將中文設為一種複數形式,因此使用諸平台進行翻譯時,請略過 msgid 的單數形式,只翻譯複數形式。

    範例一、原文如下:
    ----------------------------------------------------------------
    #. TRANSLATORS: title: show a list of fonts
    #: ../src/gpk-dbus-task.c:1645
    #: ../src/gpk-dbus-task.c:2109
    #: ../src/gpk-dbus-task.c:2498
    msgid "Do you want to install this package now?"
    msgid_plural "Do you want to install these packages now?"
    msgstr[0] ""
    msgstr[1] ""
    ----------------------------------------------------------------

    若設定為兩種複數形式,上段內容的譯文應以下方格式寫出:
    ----------------------------------------------------------------
    #. TRANSLATORS: title: show a list of fonts
    #: ../src/gpk-dbus-task.c:1645
    #: ../src/gpk-dbus-task.c:2109
    #: ../src/gpk-dbus-task.c:2498
    msgid "Do you want to install this package now?"
    msgid_plural "Do you want to install these packages now?"
    msgstr[0] "是否要現在安裝這個套件?"
    msgstr[1] "是否要現在安裝這些套件?"
    ----------------------------------------------------------------
    其中的 msgstr[0] 請填入第一種複數形式,也就是「單數」的翻譯;而 msgstr[1] 則請填入第二種複數形式,也就是「複數」的翻譯。

    若設定只有一種單複數形式,上段內容的譯文應以下面格式寫出:
    ----------------------------------------------------------------
    #. TRANSLATORS: title: show a list of fonts
    #: ../src/gpk-dbus-task.c:1645
    #: ../src/gpk-dbus-task.c:2109
    #: ../src/gpk-dbus-task.c:2498
    msgid "Do you want to install this package now?"
    msgid_plural "Do you want to install these packages now?"
    msgstr[0] "是否要現在安裝這些套件?"
    ----------------------------------------------------------------
    其中的 msgstr[0] 請填入唯一的單複數形式「複數」,而多餘的 msgstr 則必須要刪除。

    範例二、原文如下: 
    ----------------------------------------------------------------
    #: src/msgcmp.c:338 src/po-lex.c:701
    #, c-format
    msgid "found %d fatal error"
    msgid_plural "found %d fatal errors"
    msgstr[0] ""
    msgstr[1] ""
    ----------------------------------------------------------------

    若設定為兩種單複數形式,上段內容的譯文應以下面格式寫出:
    ----------------------------------------------------------------
    #: src/msgcmp.c:338 src/po-lex.c:701
    #, c-format
    msgid "found %d fatal error"
    msgid_plural "found %d fatal errors"
    msgstr[0] "找到 %d 個嚴重錯誤"
    msgstr[1] "找到 %d 個嚴重錯誤"
    ----------------------------------------------------------------
    其中的 msgstr[0] 請填入第一種複數形式,也就是「單數」的翻譯;而 msgstr[1] 則請填入第二種複數形式,也就是「複數」的翻譯。

    若設定只有一種單複數形式,上段內容的譯文應以下面格式寫出:
    ----------------------------------------------------------------
    #: src/msgcmp.c:338 src/po-lex.c:701
    #, c-format
    msgid "found %d fatal error"
    msgid_plural "found %d fatal errors"
    msgstr[0] "找到 %d 個嚴重錯誤"
    ----------------------------------------------------------------
    多餘的 msgstr 必須刪除。

    4. 特殊字元

    (1) 標準 gettext 格式 PO 檔中的轉義字元和取消轉義
    標準 gettext 格式中的轉義字元同 C 語言中的基本相同,常用的有以下幾個:
    • \n   換列
    • \t   水平製表符
    • \v  垂直製表符
    您不需要將同樣數量的格式標記放在翻譯中,但是如果它們之一有在原文開始或者結束位置的時候,您必須在翻譯中使之包含在對應的開始或者結束之處。

    如果要顯示非轉義字元,則需要使用 \ 來表明取消轉義,如 " (半形雙引號)在 PO 檔中表示字元串的開始或者結束,如果要在內容中使用該符號,則需輸入 \ ",還可以參考以下例子:
    ----------------------------------------------------------------
    \"\\t\"
    ----------------------------------------------------------------
    在執行時顯示的結果是 "t"

    (2) XML 中的
    角括號和 "&" 符號
    有一些模組中 XML 被頻繁地使用,GConf 是最明顯的。 XML 將 "<"、">" 與 "&" 視為保留字元,您不能將其直接添加到翻譯中。必須將其實體以下面的形式表示:
    &lt 代表 <; &gt 代表 >; &amp 代表 &。

    (3) TRUE 和FALSE
    "TRUE" 和 "FALSE" 多出現於 gtk+ 和 Gconf,以及很多 Glade 所產生的文件中 (這些文件以 .glade 為文件名結尾),不要翻譯它們。如果程式找不到它們,將會出現問題。

    5. 標點的使用

    一般的原則是:除了小括號、省略號和破折號保留不變以外,都應該使用中文 (全形) 標點符號。英文標點符號後方常常跟隨有一個半形空格,請在翻譯成中文標點符號時將其去除。

    1. 英文中的 , 在中文中可能是,或者、
    2. 英文中的 . 在中文中應該是,或者。 ,視上下文而定,多數是。
    3. 英 文中的 \"%s\" 在 GUI 程序中應該翻譯為 「%s」, 而不是 \"%s\" 或者 \「%s\」,而且後者是不符合換碼序列要求的。即在 GUI 程序中 `something' 和 'something' 以及 \"something\" 都應該翻譯為 「某事」
    4. 英文中的 \"%s\" 在 CLI 程式中應保持為 \"%s\",因為全形引號在文字界面下顯示不夠美觀,所以使用半形雙引號,即在 CLI 程式中 `something' 和 'something' 以及 \"something\" 都應譯作 \"某事\"
    5. 英文中的 \"command -parameter argument\" 或 'command -parameter argument' 等語境為英文的字句,請將引號保持原樣,而不必改為中文引號「」
    6. 英文中的 : 應該翻譯為:(全形)而不是:(半形), 而作為分隔符時(例如時間) 的 : 請保留為英文(半形)的,因為這個時候不是標點符號
    7. 英文中的 ( ) 應該保持不變。由於全形小括號( )很難看,也佔地方,所以一律使用半形小括號 ( )。若小括號前後有文字 (包含中文、英文) 請使用空格隔開;若小括號前後是標點,或是表示捷徑字元的小括號時,前後不應加上空格
    8. 英文中的 ... 應該保持不變。由於翻譯的時候常常難以分清哪些條目是選單項,哪些條目是一般語句,而後者才能使用中文的省略號……,所以現在統一翻譯為...
    9. 英文中的 -- 應該保持不變。由於全形破折號 —— 相容性不好,有時顯示為兩個方格,所以不再使用
    10. 遇到 %q 標記的時候,代表此標記顯示的是一段引用內容,程式執行時將自動在其兩端加上雙引號,故不需另加引號
    11. 遇到說明英文標點的訊息時,除了翻譯為中文外,請在譯文中加入該標點,並在標點前後加上英文引號。例:"seperated by common" 即「以半形冒號 ':' 隔開」或「以半形冒號 \":\" 隔開」
    12. 遇 到說明選單的訊息時,例如:System > Administration ,可以見到頭文字大寫,這麼做除了模擬選單本身頭文字大寫外,還能在同是小寫的句子中吸引讀者的目光。因此請使用上下引號將選目內容括住,以達到同樣效 果:「系統」>「管理」。並請注意標點之間無需空格。

    6. 關於空格

    為了美觀,通常建議在中文與英文、中文與阿拉伯數字、英文與阿拉伯數字之間加入一個半形空格。例如:
    ----------------------------------------------------------------
    msgid "Installing driver for %1"
    msgstr "正在安裝 %1 的驅動程式"

    msgid ""
    "Parameter start_num specifies the character at which to start the search. "
    "The first character is character number 1. If start_num is omitted, it is "
    "assumed to be 1."
    msgstr ""
    "參數 start_num 指定開始搜索的字元位置。第一個字元序號為 1。如果省略"
    "start_num,預設它為 1。" 
    ----------------------------------------------------------------
    對於命令列介面 (CLI) 程式,因為文字界面字體顯示的原因,一般推薦中文後接英文時不留空格,英文後接中文時留一個空格,在顯示的時候不會因為英文前後都有空格而造成英文前面的空餘空間遠大於後面造成的不美觀,例如:
    ----------------------------------------------------------------
    msgid "Set LC_ALL='C' to work around the problem."
    msgstr "請設定LC_ALL='C' 以避免出現問題。" 
    ----------------------------------------------------------------

    對於小括號和半形引號,在與中文或英文鄰接處加入空格:
    ----------------------------------------------------------------
    msgid "Original idea and author (KDE1)"
    msgstr "原始創意和作者 (KDE1)"

    msgid ""
    "The APM Management subsystem seems to be disabled.\n"
    "Try executing \"apm -e 1\" (FreeBSD) and see if \n"
    "that helps.\n"
    msgstr ""
    "APM 管理子系統似乎被禁用了。\n"
    "試試執行 \"apm -e 1\" (FreeBSD) 並看看\n"
    "是否有用。\n"
    ----------------------------------------------------------------

    包含 XML/HTML 標籤的條目,如要在標籤中的內容兩側添加空格,請把空格置於標籤外側,否則空格可能顯示不出來。
    ----------------------------------------------------------------
    這是 &amp;lt;b&amp;gt;HTML&amp;lt;/b&amp;gt; 的語法手冊
    ---------------------------------------------------------------- 

    7. 選單項中捷徑字元

    捷 徑字元一律使用大寫字母,用小括號括起來放到選單文字的後面 (如果有標點符號則放在標點符號的前面),並且小括號前後不加空格。在KDE 中,選單捷徑字元的前綴是 "&"; 在GNOME 中,選單捷徑字元的前綴是 "_"。但是如果翻譯保留了原文的英文單詞或阿拉伯數字,且該單詞或數字正好是快速鍵所在的單詞或數字時,應保留原文的快速鍵方式 (如下面的第二、四個例子)。這裡舉幾個例子:

    KDE 選目:
    ----------------------------------------------------------------
    msgid "C&lear"
    msgstr "清除(&L)"

    msgid "&Glimmer Editor"
    msgstr "Glimmer 編輯器(&G)"
    msgstr "&Glimmer 編輯器" 
    ----------------------------------------------------------------

    GNOME 選目:
    ----------------------------------------------------------------
    msgid "_Setup..."
    msgstr "設定(_S)..."

    msgid "Get _CDDB Now"
    msgstr "立刻取得 CDDB(_C)"
    msgstr "立刻取得 _CDDB"

    ----------------------------------------------------------------
    注意:以下情況的翻譯有點特別。由於「複製」和「剪下」均為「編輯」選單的條目,只有這樣翻譯才能保證顯示正確!
    ----------------------------------------------------------------
    msgid "/_Edit"
    msgstr "/編輯(_E)"

    msgid "/Edit/C_opy"
    msgstr "/編輯(E)/複製(_O)"

    msgid "/Edit/C_ut"
    msgstr "/編輯(E)/剪下(_U)"

    ----------------------------------------------------------------

    注意:若是小括號重複出現,應依然遵守小括號之前後若有文字則加入空格,若非文字則不;以及捷徑字元前後不加入空格,這兩項規則。
    ----------------------------------------------------------------
    msgid "_Network (IP, Wi-Fi)"
    msgstr "網路 (IP, Wi-Fi)(_N)"
    ----------------------------------------------------------------

    8. 關於程式語言格式和 msgctxt

    翻 譯過程中常會遇到 "c-format" 一類的標記,-format 標記代表該段字元串需要按照指定的程式語言格式輸出,最常見的就是按照 C 語言格式輸出。其他比較常見的還有 python-format、scheme-format、perl-format、php-format、qt-format 和 kde-format 等。
    msgctxt 標記 (可以理解為 message context) 是給出字元串所處的不同環境,通常情況下同一個 msgid 只能在一個 PO 檔中出現一次,但是在有不同的 msgctxt 標記存在時,一個文件中可以出現多個相同的 msgid,因為它們各自的上下文不同,所以可能有不同的譯文。

    9. 翻譯中參數的位置

    有時候原來的參數順序不符合中文的語法,一方面, 翻譯可以通過調整副詞、語序等手法來符合中文習慣,另外一方面,在必要的情況下,需要改變參數的位置,例如在 KDE 中:
    -------------------------------------------------- --------------
    msgid "%1 articles match rule %2"
    msgstr "符合規則 %2 的文章有 %1 個" 
    ----------------------------------------------------------------

    如果是 GNOME 中的 "c-format" 則應該這樣寫:
    ----------------------------------------------------------------
    msgid "%d articles match rule %d"
    msgstr "符合規則 %2$d 的文章有 %1$d 個" 
    ----------------------------------------------------------------
    即用1$、2$、3$ 等符號標明參數在原文裡出現的位置。同時,任何一個參數的順序進行了調整,則在這一句譯文中所有參數都必須註明原文位置,否則無法通過格式檢查。

    10. 注意註解

    文件中有時會有給翻譯者的註解,以 "#." 開頭,多數情況下還會有 "TRANSLATORS" 字樣提示。通常是對所翻譯內容的解釋和提示,請在翻譯過程中留意。例如:
    ----------------------------------------------------------------
    #. TRANSLATORS: ls output needs to be aligned for ease of reading,
    #. so be wary of using variable width fields from the locale.
    #. Note %b is handled specially by ls and aligned correctly.
    #. Note also that specifying a width as in %5b is erroneous as strftime
    #. will count bytes rather than characters in multibyte locales.
    #: src/ls.c:708
    msgid "%b %e %Y"
    msgstr "%b %e %Y"
    ---------------------------------------------------------------- 

    11. 關於換列1 

    對於很長的譯文,就涉及到了換列問題。多數情況下沒有限制,因為不影響最終的顯示效果,只要閱讀起來方便就行。下面幾種格式都是正確的:
    ----------------------------------------------------------------
    msgid ""
    "Preview failed: neither the internal KDE PostScript viewer (KGhostView) nor "
    "any other external PostScript viewer could be found."
    msgstr ""
    "預覽失敗:找不到 KDE 內建的 PostScript 查看器(KGhostView)或其它外部"
    "的 PostScript 查看器。"

    msgid ""
    "Preview failed: neither the internal KDE PostScript viewer (KGhostView) nor "
    "any other external PostScript viewer could be found."
    msgstr "預覽失敗:找不到 KDE 內建的 PostScript 查看器(KGhostView)或其它外部"
    "的 PostScript 查看器。"

    msgid ""
    "Preview failed: neither the internal KDE PostScript viewer (KGhostView) nor "
    "any other external PostScript viewer could be found."
    msgstr ""
    "預覽失敗:找不到 KDE 內建的 PostScript 查"
    "看器(KGhostView)或其它外部"
    "的 PostScript 查看器。"
    ----------------------------------------------------------------

    但 是,如果 msgid 前方有 "#, c-format" 標記,或者原文中有強迫換列標記 "\n",那就要手工調整譯文的換列,以便能最終正確地顯示在程式界面上。原則是譯文長度不大於原文長度,否則可能譯文顯示超出原有區域,或者譯文後面部 分被截去,很難看。對於含有 HTML 標記的長譯文還需要在瀏覽器中預覽顯示效果(如果您了解 HTML 基本語法的話),酌情調整列寬。例如:
    ----------------------------------------------------------------
    #, c-format
    msgid ""
    "Error opening file '%s':\n"
    "%s"
    msgstr ""
    "打開文件 “%s” 時發生錯誤:\n"
    "%s"

    msgid ""
    "Parse a theme dir and generate a \n"
    "gkrellmrc_ksim file that KSim will understand \n"
    "better and exit."
    msgstr ""
    "解析一個主題目錄產生 KSim 可以理解\n"
    "的 gkrellmrc_ksim 文件,然後退出。"
    ----------------------------------------------------------------

    多 數 CLI 程式都需要手工設定換列,這個時候希望翻譯者能夠對翻譯文件進行測試以確定每行到底應當放多少字元,尤其是翻譯命令參數的時候,如果不對長句進行強制換行 處理或者一味依照文字編輯器所顯示的視覺上與英文原文長度相同,則很容易造成在程式實際執行中的格式非常難看。

    12. 關於對齊

    對 齊的問題通常出現在 CLI 程式的命令參數上,英文原文一般會使用空格進行對齊,但是空格並不能使得最終執行的程式在使用中文的情況下將文字正確對齊,所以應當使用製表符 (Tab) 代替。製表符的對齊也不總是能在文字編輯器上所見即所得,也就是說在文字編輯器上已經對齊的行可能在實際執行時前後相差一個製表符的距離。

    13. 關於模糊譯文

    如 果看到 "#, fuzzy" 標記,則表示本段譯文是由工具軟體(通常是 msgmerge 命令)猜測翻譯得到的。有時比較準確,有時卻謬之千里。另一種情況是譯者或校對人員主動加上去的,因為他們對該條譯文沒有把握。因此請對其譯文進行修訂, 然後去除模糊標記, 否則本段譯文將不能顯示在程式界面上。原則上,所有既往給出的譯文,在翻譯的時候都應該校對一遍。例如您拿到的文件中有如下行時:
    ----------------------------------------------------------------
    #: groupdlg.cpp:209 groupdlg.cpp:216 groupdlg.cpp:229
    #, fuzzy
    msgid "Get Tagged Articles"
    msgstr "取得文章" 
    ----------------------------------------------------------------
    當您修正可能存在的錯誤後刪除整個 "#, fuzzy " 一行就可以了:
    ----------------------------------------------------------------
    #: groupdlg.cpp:209 groupdlg.cpp:216 groupdlg.cpp:229
    msgid "Get Tagged Articles"
    msgstr "取得已標籤文章"
    ----------------------------------------------------------------
    可能還會遇到下面的情形:
    ----------------------------------------------------------------
    #: groupdlg.cpp:623
    #, fuzzy, c-format
    msgid "Connecting to server %s"
    msgstr "正在連接服務器"

    ----------------------------------------------------------------

    在這裡,修正翻譯後在清除模糊標記時,"c-format" 標籤必須保留:
    ----------------------------------------------------------------
    #: groupdlg.cpp:623
    #, c-format
    msgid "Connecting to server %s"
    msgstr "正在連接服務器 %s"
    ----------------------------------------------------------------

    14. 關於已淘汰譯文

    老 版本的程式中總有一些訊息會在新版本中淘汰掉,這些譯文由 msgmerge 程式自動設定為以 #~ 開頭,並被置於整個 po 檔的後方,直接刪除它們不會影響當前版本的翻譯內容,但是因為這些字元串還可能在以後的版本中重新出現,屆時 msgmerge 還可以使用這些譯文來提供翻譯建議,所以如果它們沒有影響到您的工作建議不要刪除它們。例如:
    ----------------------------------------------------------------
    #~ msgid "Error: no name"
    #~ msgstr "錯誤:沒有姓名"

    #~ msgid "Configure"
    #~ msgstr "組態"
    ----------------------------------------------------------------

    15. 關於 "translator-credits" 字串

    "translator-credits" 是放置程式執行過程中查看鳴謝訊息時顯示的翻譯者條目,根據不同項目的小組可能有不同的填寫要求,最通常的填寫辦法是將名字和電子郵件地址列表如下:
    ----------------------------------------------------------------
    msgid "translator-credits"
    msgstr
    "Telsa Gwynne <hobbit@aloss.ukuug.org.uk>\n"
    "Dafydd Harries <daf@muse.19inch.net>"

    ---------------------------------------------------------------- 
    注意在多個人名時最好每個人佔用一行,除最後一行外每一行的結尾都要使用\n 來進行換行。

    16. 關於時間的譯法

    鑑於關於日期和時間的譯法十分複雜,現在將國家標準中有關規定簡要介紹一下,並給出推薦譯法。
    中華民國國家標準的 CNS 7648資料元及交換格式·資訊交換·日期及時間的表示法》 (範例請見第 12 頁) 類似於 ISO 8601 國際標準。
    可用公元年,也可冠以大寫 R.O.C. 字母表示民國紀元。例如,2004年(中華民國九十三年)5月3日可寫作 2004-05-03  R.O.C.93-05-03

    以下是最需要注意的幾個要點:
    (1) 從國家標準的範例看來,日期格式中的阿拉伯數字與中文字間不應加入空格,應使用「2003年」這樣的格式。
    (2) 表示日期時,必須按照年月日的順序;年份一般用四位數字,而月、日必須使用帶前導零的兩位數字;必須使用 "-" 作為分隔符,或完全不使用分隔符。即 "2004-01-03" 或 "20040103" 來表示2004年1月3日。
    (3) 表示時間時,時、分、秒都必須使用兩位數字,中間用半形冒號 ":" 分隔,或完全不使用分隔符。小時計法採用 24 小時制,不區分上下午。
    (4) 日期和時間寫在一起的時候,應先寫日期再寫時間。在日期和時間都不使用分隔符的情況下,在中間添加字母 "T" 進行分隔,即 "19850412T101530"。

    時間的表示方法同 date 命令的表示方法,現將常見的幾個對應其含義列表如下:
    1. %%     一個 % 字元
    2. %a      星期幾簡寫 (如「一」)
    3. %A      星期幾 (如「星期一」)
    4. %b      月份名稱縮寫 (如「8月」)
    5. %B      月份 (如「八月」)
    6. %d      日期 (00-31)
    7. %D      日期,格式等於%m/%d/%y (例如:08/25/09)
    8. %e      日期,加入空格排版 (非二位數時前方補上空格)
    9. %F      日期,格式等於%Y-%m-%d (例如:2009-08-25)
    10. %g      ISO-8601 格式年份的最後兩位 (例如:09)
    11. %G      ISO-8601 格式年份 (例如:2009)
    12. %h      同 %b
    13. %H      小時 (00-23)
    14. %I       小時 (00-12)
    15. %k      小時 (0-23)
    16. %l       小時 (1-12)
    17. %m     月份 (01-12)
    18. %M     分鐘 (00-59)
    19. %n      換列
    20. %p      顯示「上午」或者「下午」兩個字
    21. %S      秒 (00-60)
    22. %t       製表符 (Tab)
    23. %T      時間,等於%H:%M:%S
    24. %x      日期 (例如:12/31/99)
    25. %X      時間 (例如:23:13:48)
    26. %y      年份的最後兩位 (例如:09)
    27. %Y      年份 (例如:2009)

    四、相關工具的使用

    1. gettext 工具組

    gettext 工具組提供了一組使用 PO 檔進行翻譯時的實用工具,現在對其中比較常用的幾個做簡短介紹。
    若希望了解關於此工具的詳細訊息,請瀏覽 GNU `gettext' utilities

    (1) msgfmt - 檢查格式並產生機讀的 MO 檔
    一般使用的格式為:
    ----------------------------------------------------------------
    msgfmt --statistics -cv filename.po
    ----------------------------------------------------------------
    這樣將會對翻譯格式進行檢查,如果有格式問題則會顯示錯誤原因並指明行號;如果檢查通過則顯示翻譯的進度情況並在執行目錄下產生一個名為 message.mo 的文件,該文件便是程式執行時所要讀取的二進制翻譯文件。
    在提交任何 PO 檔前都請使用 msgfmt 命令對格式進行檢查。

    (2) msgmerge - 合併文件
    一般使用的格式為:
    ----------------------------------------------------------------
    msgmerge --no-wrap -o newfile.po fileA.po fileB.po
    ----------------------------------------------------------------
    這樣進行的結果是將文件 A 和文件 B 進行合併,若有不相同的地方以文件 B 為準,最後輸出在 newfile.po 中。

    可以使用其更新選項來合併原來的 PO 檔和最新的 POT 檔: 
    ----------------------------------------------------------------
    msgmerge -U zh_TW.po example.pot
    ---------------------------------------------------------------- 
    這樣將會把原來的 zh_TW.po 另存為 zh_TW.po~ 並更新 zh_TW.po 為新的內容,zh_TW.po~ 作為備份文件可以直接刪除。
    (3) msgconv - 轉換文件編碼
    一般使用的格式如下,作用為把 zh_TW.po 從其他編碼轉換為 UTF-8 編碼:
    ----------------------------------------------------------------
    msgconv -t UTF-8 zh_TW.po
    ----------------------------------------------------------------
    msgconv 會自動更新文件頭出的 charset 設定,但是在開始翻譯前不妨再進行一下檢查以免出現問題。

    (4) msginit -從 POT 檔建立 PO 檔
    一般的使用格式為: 
    ----------------------------------------------------------------
    msginit -i example.pot -l zh_TW.UTF-8

    ----------------------------------------------------------------
    這樣將會詢問翻譯者的電子郵件地址,然後產生一個名為 zh_TW.po 的 UTF-8 編碼文件。
    如果執行程式的目錄下只有一個 POT 檔則 -i 選項可以省略;如果執行的 locale 為 zh_TW.UTF-8 則 -l 選項可以省略,也就是說這個命令最簡單的時候可以只輸入 msginit
    因為 PO 檔和 POT 檔的格式存在著一些微小的差異,如果您不是對它們十分了解則請使用此程式以避免可能出現的麻煩。

    2. intltool 工具組

    intltool 工具組實際上是一組指令稿,用以進行一些日常的翻譯文件維護,其中部分指令除了支援 PO 檔外還支援 XML。它一共有五個指令,對於翻譯者來說比較常用的是 intltool-update 和 intltool-merge。這組工具多數需要在完整的源始碼樹中的 po/ 子目錄下執行。若要了解更多有關於 intltool 工具的訊息,請閱讀它的 man 手冊。 

    (1) intltoo-update - 更新 POT 檔並將 PO 檔與之合併
    通常使用它產生 POT 檔時使用以下命令:
    ----------------------------------------------------------------
    intltool-update -p
    ----------------------------------------------------------------
    這樣將會在目錄中產生一個 POT 檔。

    要使用它更新原有的 PO 檔,可以這樣執行: 
    ----------------------------------------------------------------
    intltool-update zh_TW
    ----------------------------------------------------------------
    這樣將會自動產生新的 POT 檔並更新 zh_TW.po,最後得到的文件是更新後的 zh_TW.po ,也可以使用 -o 選項來定義輸出到指定文件而非更新原來的 PO 檔。

    使用它來查看源始碼中的 POTFILES 檔是否有正確維護,通常翻譯者不需要做這項工作:
    ----------------------------------------------------------------
    intltool-update -m
    ----------------------------------------------------------------
    如果輸出為空則代表一切正常,否則將有詳細提示。

    (2) intltool-merge - 合併翻譯文件
    一般使用方法為:
    ----------------------------------------------------------------
    intltool-merge --utf8 po_directory input output
    ----------------------------------------------------------------
    其 作用為將指定的 po_directory 目錄中的所有 PO 檔同 input 文件合併,並將輸出寫入到 output 文件,output 文件包含了 input 文件中的原始字串和其他 PO 檔中的已翻譯字串。在進行合併前會把所有文件都自動轉換為 UTF-8 編碼。 
    當 input 為一個 XML 文件時,輸出的 output 文件也將是 XML,PO 檔中翻譯的字串將作為 “xml:lang” 屬性插入到原 XML 中一併寫入 output 文件。 

    3. xml2po

    xml2po 是 gnome-doc-utils 中的一個工具,主要用途是在 XML 和 PO 檔之間進行轉換和合併。
    要從 XML 文件產生 PO 文件:
    ----------------------------------------------------------------
    xml2po -e -o book.pot book.xml
    ----------------------------------------------------------------

    反過來要把已翻譯的 zh_TW.po 合併回原來的 XML 檔中:
    ----------------------------------------------------------------
    /usr/bin/xml2po -e -p zh_TW.po -o book.zh_TW.xml book.xml
    ----------------------------------------------------------------

    後記

    原文為「自由软件中文化工作指南(L10N)」,是 Aron Xu <happyaron.xu@gmail.com> - 2009-08-26 以 KDE 中國網站上刊載的 I18N/L10N工作流程 為藍本所修訂的工作指南,過程中参考了 i18n-zh 以及 GNOME Live 上的一些文章。若對於該指南内容有任何意見,請將它發送至 i18n-zh@googlegroups.com

    本文是以 Pellaeon Lin <nfsmwlin@gmail.com> - 2010-02-21 對於上述簡體文件譯為正體後發布的「自由軟體中文化工作指南(L10N)」為基礎修改而成。
    -- Cheng-Chia Tseng <pswo10680@gmail.com> - 2010-05-07

    本文在 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported許可下發布。