網頁

2014年11月14日 星期五

11/14 自由軟體的國際化與在地化與ezgo打包技術

講者: Franklin,社群中被稱為馬哥,但他不姓林也不姓馬~

自由軟體國際化與在地化:


Frank從遊戲切入,指出過去的軟體,遊戲,和程式,要能顯示中文,必須處理非常多的事情,包含訊息的修改,字體的解析度,與編碼的問題...等等



除了中英文的訊息之外,還有
  • 數字表示法: 歐洲的1000是"1.000" ,1是"1,000"
  • 年分表示法: 西元年, 民國年....
  • 日期表示法: dd/mm/yyyy, mm/dd/yyyy, yyyy/mm/dd
  • 以及不同的度量衡與貨幣...等等

為了處理上述的問題,發展了多國語言化的概念

  1. 將原始程式與訊息分開,獨立出訊息編成索引後存成一個檔案
  2. 翻譯不同語言的時候只要將該語言加入檔案的索引
  3. 原始程式只要根據某個語言的索引來顯示相對應的訊息即可
將程式中的語言,文化,區域環境相關的部分獨立出來,因此程式撰寫的時候不需考慮各個地區的細節,而是在執行期的時候根據當時的環境呈現

Linux中文化始祖 - CLE

Chinese Linux Extension 
延伸: 修改程式內容,加入中文支援,重新編譯

自由軟體很重要的文化,就是可以與原始開發團隊溝通,將自己做的東西貢獻回去,因此CLE與原始程式的開發團隊合作,加入國際化的架構


自由軟體的國際化 - Gettext

  • 原理: 利用對訊息的包裝,將訊息抽出來集中在一個檔案裡
  • printf(gettext("My name is %s.\n", my_name);
  • 取出來的原始訊息檔稱為pot
  • 翻譯者只需要將pot檔的訊息翻譯成不同的語言,每個語言存成一個po檔

po檔分成檔頭與條目兩個部分

  • 檔頭存放po檔與相對應的pot檔的相關訊息,包含產生時間,最後翻譯者等等,還包含一個很重要的資訊: 複數形的定義( plural-forms),不同國家的複數形都不一樣,有些國家的複數形很複雜
  • 條目分成幾個部分:
    • 旗標
    • 註解: 用來區分相同訊息但不同意義,以彈珠台舉例"left"可以翻為左側或是剩餘
    • 原始訊息
    • 翻譯訊息

ezgo 打包技術:


ezgo的目標客群是針對沒有接觸過自由軟體的人,經由ezgo來了解自由軟體世界的面貌

ezgo是一個客製化的distribution,擁有自己的品牌,卻不是一個獨立的distribution

目前的做法:
  • 盡可能遵循標準機制,並進行自動化: 例如選單
  • 採用外加設定檔的方式,不覆蓋現有的檔案
  • 做成package: deb, rpm, ...
  • 遵循Debian規範,遵循規範可以省下很多工作
ezgo12分成三個版本,
A版: All in one,包含所有東西,以推廣為主
B版: Basic,只有基本的桌面,其他軟體依自己需求安裝
C版: Classroom,包含許多教學軟體,並移除遊戲,提供給老師使用