SlideShare a Scribd company logo
1 of 44
成大資工
自由軟體開發與社群發展
2015/11/13
今日主題
1. 自由軟體的國際化與在地化
2. ezgo 打包技術初窺探
以下內容包含技術成份,請保持清醒!
This presentation contains technical
contents, please keep awake!
自由軟體
的
國際化與在地化
104.11.13
2015.11.13
11.13.2015
13.11.2015
Franklin
About me
•Franklin ,不姓林。用 Franklin 、好馬的名字闖盪網路
世界廿年。社群中也被稱為馬哥(來源)。
(但我也不姓馬 ... )
•大一開始玩 Linux ,但真正一頭栽入 Linux 與自由軟
體世界與社群,是在念研究所的時期。那時發生了一些
悲劇 ......
•出社會十幾年都在幹 RDDDDDDDDD! (來源),
曾經是上市公司 RD 部門的 1.5 級主管,現在則是以
國際化與在地化
《 The Legend of Kryandia 凱蘭迪亞傳奇》, 1992 。
圖片來源:骨灰集散地
國際化與在地化
《 Might and Magic III – Isles of Terra, 魔法門 3 幻島歷險記》 , 1991 。
圖片來源:骨灰集散地
簡
體
字
?
國際化與在地化
《 Where in the World is Carmen Sandiego? 卡門聖地牙哥》, 1985 。
圖片來源:骨灰集散地
國際化與在地化
《大富翁》,推出年代不可考,約在 1986 附近
圖片來源:骨灰集散地
國際化與在地化
●
過去的軟體、遊戲、程式,要能顯示中文,必須處理非常
多的事情,包括:
– 訊息的修改
– 字型的處理
– 編碼的問題 … 等等
●
所以過去的軟體或遊戲,「中文版」的推出是一件大事。
國際化與在地化
●
除了訊息的表達之外,還可能有什麼問題?
– 數字的表示法: 1.000 or 1,000?
– 年份的表示法:西元年,民國年,泰曆,日本曆 ...
– 日期的表示法: mm/dd/yy, yyyy/mm/dd, …
– 金錢的表示法
– 度量衡系統:公制?英制?
– ……
國際化與在地化
●
如果想要賣一套軟體給不同的國家,非得這麼麻煩不可
?嗎
– 每個國家適用的軟體,訊息都要改一遍再重新編譯
– 字型怎麼顯示?
– 數字 ?日期 ?呢 呢
●
所以開始有一些簡單的機制發展出來。
簡單的多國語言化概念
原始程式
原始
訊息檔
正體中文 簡體中文
1. 將訊息抽取出來
編索引後
存成一個檔
2. 將該 的內容檔
翻譯成
不同語言
3. 修改訊息機制
參考翻譯後的檔
根據索引顯示
相對應的訊息
簡單的多國語言化(範例)
/usr/share/kde/apps/kim/kim_translation:
if [ $LANG == 'zh_TW.UTF-8' ]; then
SELECT_ALBUM_TYPE="Kim - 選擇相簿型態 "
ONE_BY_ONE_PORTRAIT_ALBUM="1x1 直向相簿 "
ONE_BY_ONE_LANDSCAPE_ALBUM="1x1 橫向相簿 "
ONE_BY_TWO_LANDSCAPE_ALBUM="1x2 橫向相簿 "
.........
else
SELECT_ALBUM_TYPE="Kim - Select album type"
ONE_BY_ONE_PORTRAIT_ALBUM="1x1 portrait album"
ONE_BY_ONE_LANDSCAPE_ALBUM="1x1 landscape album"
ONE_BY_TWO_LANDSCAPE_ALBUM="1x2 landscape album"
.........
fi
簡單的多國語言化(範例)
/usr/bin/kim_album:
. `kde4-config
--prefix`/share/kde4/apps/kim/kim_translation
dir="$1";
nb=`kdialog --radiolist "$SELECT_ALBUM_TYPE" 1
"$ONE_BY_ONE_PORTRAIT_ALBUM" off 2
"$ONE_BY_ONE_LANDSCAPE_ALBUM" off 3
"$ONE_BY_TWO_LANDSCAPE_ALBUM" off 4
"$TWO_BY_ONE_PORTRAIT_ALBUM" off 5
"$TWO_BY_TWO_LANDSCAPE_ALBUM" on 6
"$THREE_BY_TWO_PORTRAIT_ALBUM" off 7
"$THREE_BY_FOUR_LANDSCAPE_ALBUM" off 8
"$FOUR_BY_FOUR_LANDSCAPE_ALBUM" off`
.........
簡單的多國語言化(範例 2 )
if (config.lang == LANG_EN) {
fp = fopen(LANG_EN_FILE, "r");
if (fp) {
fread(langBuffer, sizeof(langBuffer), 1, fp);
fclose(fp);
}
}
......
printf(langBuffer[23], a, b, c);
......
Lang.en.txt:
OK
Open
Close
Clean
......
Lang.zh_TW.txt:
確定
開啟
關閉
乾淨
......
Lang.zh_CN.txt:
定确
开启
上关
干净
......
Linux 上的中文化始祖 - CLE
●
Chinese Linux Extension – Linux 中文延伸套件計畫
●
「延伸」 ==> 修改程式內容,加入中文支援,重新編譯打包
●
有點像是十幾年前的 ezgo
Linux 上的中文化始祖 - CLE
●
CLE 的開發團隊知道,不能光是修改打包,因此積極與原始程式的
開發團隊合作,加入國際化的架構。
●
包括 Linux, glibc, Qt, GTK+, KDE, Gnome 等大型計畫都曾收過
CLE 開發團隊的修改。
●
因此而奠定了現在 Linux 上國際化與在地化的基礎。
國際化與在地化
●
國際化: Internationalization, i18n
– 維基百科的定義:將軟體與特定語言及地區脫鉤的過程。
當軟體被移植到不同的語言及地區時,軟體本身不用做
內部工程上的改變或修正。
– 簡單地說,就如同剛才的圖所示:將程式中跟語言、文化、區域環境相關的
部份獨立出來,放在「區域環境資料庫」( locale )。在設計程式時不考慮
對特定區域環境的支援細節,而是在執行時期才依使用者所選擇的區域環境
找到不同的資料庫,提供該區域的支援。
國際化與在地化
●
在地化: Localization, l10n
– 根據國際化所定下來的架構,建立專屬於某個地區、文化的資料庫,填入該地區、文化的資料,供
程式在執行期呈現。
– 在地化的內容包括:
●
語言、文字翻譯
●
特定語言支援(左到右、右到左)
●
符號、數字、度量衡系統
●
排序方法
– 後面幾項通常只有一次功,放在系統內。而翻譯則是每個程式、文件都需要。所以目前我們在說的
l10n 多半是指翻譯。
自由軟體的國際化 - Gettext
●
Gettext 原先是 Sun Microsystems 所開發,後來 GNU
project 在 1995 年釋出了 GNU Gettext 。
●
原理跟前面所描述的一樣:利用對訊息的包裝,將訊息抽取出
來集中在一個 。檔
– printf(gettext("My name is %s.n"), my_name);
– printf(_("My name is %s.n"), my_name);
●
取出來的原始訊息 稱為檔 PO template (*.pot)
用 Gettext 實現
自由軟體的多國語言化
●
所以現在採用 Gettext 機制的自由軟體,它的多國語言化
已經變成一件很簡單的事。
●
翻譯者只需要拿 pot 檔把裡面的訊息翻譯成不同的語言,
每個語言存成一個 po 檔。
●
Po 需要再編譯一次,成為軟體看得懂的檔 mo 。不過檔
這部份可以交給開發者。
PO 的內容與格式: 頭檔 檔
●
PO 裡分為: 頭與條目兩部份。檔 檔
●
頭存放的是這個檔 po 與其相對應的檔 pot 的相關檔
資訊,包括產生時間、最後翻譯者等等,還有一個很重
要的資訊:複數形的定義( plural-forms )。
●
複數形的定義範例:
Plural-forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n
%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)
Plural-forms: nplurals=2; plural=n != 1
Plural-forms: nplurals=1; plural=0
msgid "%d byte"
msgid_plural "%d bytes"
msgstr[0] "%d bajt"
msgstr[1] "%d bajty"
msgstr[2] "%d bajtů"
PO 的內容與格式:條目檔
●
條目分為幾部份:
– 旗標
– 註解:很重要!
●
區分相同訊息但不同意義
– 原始訊息
– 翻譯訊息(單、複數)
#: kwalletd.cpp:550
msgctxt ""
"Text of a button for switching to the (unnamed) application requesting a "
"password"
msgid "Switch there"
msgstr " 在那裡切換 "
旗標
註解
原始訊息
翻譯訊息
「左側」的故事
自由軟體的中文化
●
簡單掌握住以上幾點後,就可以來做中文化了。
(謎之聲:其實以上的都不懂也還是可以做中文化啊 ... )
●
自由軟體的中文化需要 些工具?哪
– 文字編輯器
– 簡單的英翻中的概念
– 熱心、耐心與恆心
●
現在也有許多軟體工具與線上平台幫助大家翻譯 po 、整理過去翻檔
譯過的 案等等。檔
翻譯工具介紹
●
任何文字編輯器
●
Poedit 、 Lokalize 等軟體
– 翻譯資料庫
●
Launchpad 、 pootle 、 transifex、
crowdin 等線上共筆翻譯平台
– 提交上游的問題
●
單獨作業 vs 多人共筆
Gettext 的涵蓋範圍
●
除了翻譯應用程式之外,它也被用來翻譯
– 文件
– 網頁
●
除了 C / C++ 外,它也可以用在
– PHP
– Python
– Java
– Ruby
– ...... 族繁不及備載
其他的多國語言化做法
●
除了 Gettext (PO) 外,還有很多種做法:
– Qt 的 ts 檔 (XML 格式 )
– PHP language define
– Windows Resource file
– Java Properties
●
Translate toolkit 可以在特定格式間轉換
Q & A
中場休息
ezgo 打包技術初窺探
2015/11/13
Franklin
What is ezgo?
從推廣面來說
●
目標客群
●
特色思考
從技術面來說
●
客製化的 distribution
– 有自己的品牌,卻不是一個獨立的 distribution
●
過去的做法:手動 Dirty hack!
– 手動調整選單,再把家目錄裡的設定存起來。
– 找到 布 案,做一個新的,再用原來的 名覆蓋桌 檔 檔
– ….........
從技術面來說
●
Dirty hack 的問題有 些?哪
– 改過的東西太過零散,容易忘東忘西
– 版本一多不易管理
– 不符合 Debian 規範,無法上傳
– 每年都要重新來過
從技術面來說
●
目前的做法
– 盡可能遵循標準機制,並進行自動化:例如選單
– 盡可能採用外加設定 的方式,不覆蓋現有的 案檔 檔
– 做成 package : deb, rpm, …
Debian-ezgo
● Debian Pure Blends
●
遵循 Debian 規範,將常用重複的 案與設定等等包檔
裝成 deb 。檔
●
目前包括:
– ezgo-artwork, ezgo-kde, ezgo-xfce, … etc.
– ezgo-menu
– ezgo-education, … etc.
ezgo 的調校重點一:選單
● XDG Menu Spec : Freedesktop.org
●
遵循規範產生 menu 檔
●
Desktop 格式檔
●
刷新選單 : ezgomenu_database.csv
●
每一種 面系統都有自己實作桌 XDG spec 的方式
ezgo 的調校重點二: 布桌
●
每一種 面系統都有不同的方式抓取 布桌 桌
●
採用 ezgo-artwork 搭配 ezgo-kde, ezgo-unity, ezgo-xfce, …...
●
除了 布之外,還有 些?桌 哪
– 開機 Grub 選單背景
– 開關機過程動畫
– 登入選單背景畫面
– ….........
ezgo 的調校重點三: 案系統檔
●
iso 解開再包回去的技術檔
– mount
– mkisofs
●
Squashfs 案系統檔
– unsquashfs
– mksquashfs
● initrd : init ram disk
– lzma
– cpio
ezgo 的調校重點四:軟體
● chroot
● apt-get, add-apt-repository, …... etc.
ezgo 的調校重點五:使用者體驗
●
軟體的預設設定: /etc/skel
●
快捷鍵設定:依據不同的 面系統桌
ezgo 調校過程
原始 iso 檔
mount
cp
iso 目錄
unsquashfs
解開
os 目錄
修改後
squashfs
包回去
mkisofs
製作 iso 檔
ezgo iso 檔
測試
ezgo 調校 Tasks
● ezgo12 wiki
●
除了 A/C 版之外,其他 面版本需要幫忙維護與調整桌
– LXDE
– XFCE
– Unity
– Mate
●
Debian ezgo 共同維護
Q & A

More Related Content

Similar to 成大資工自由軟體開發與社群發展課程

What are programs? 兼談現代化軟體開發
What are programs? 兼談現代化軟體開發What are programs? 兼談現代化軟體開發
What are programs? 兼談現代化軟體開發Tun-Yu Chang
 
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Dahui Feng
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913lusecheng
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺宗凡 楊
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺hydai
 
Linux软件工程师
Linux软件工程师Linux软件工程师
Linux软件工程师xiaotingting
 

Similar to 成大資工自由軟體開發與社群發展課程 (11)

What are programs? 兼談現代化軟體開發
What are programs? 兼談現代化軟體開發What are programs? 兼談現代化軟體開發
What are programs? 兼談現代化軟體開發
 
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化
 
Taiwanese Experience in IT
Taiwanese Experience in ITTaiwanese Experience in IT
Taiwanese Experience in IT
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913
 
42qu thrift1
42qu thrift142qu thrift1
42qu thrift1
 
Gmic 2012
Gmic 2012Gmic 2012
Gmic 2012
 
COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺COSCUP 2016 - LLVM 由淺入淺
COSCUP 2016 - LLVM 由淺入淺
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
 
Borland C++Builder 進階課程
Borland C++Builder 進階課程Borland C++Builder 進階課程
Borland C++Builder 進階課程
 
Linux软件工程师
Linux软件工程师Linux软件工程师
Linux软件工程师
 
Borland C++Builder 入門課程
Borland C++Builder 入門課程Borland C++Builder 入門課程
Borland C++Builder 入門課程
 

More from fweng322

LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in TaiwanLibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwanfweng322
 
LibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About MacrosLibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About Macrosfweng322
 
Migrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in TaiwanMigrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in Taiwanfweng322
 
自由軟體的國際化與在地化
自由軟體的國際化與在地化自由軟體的國際化與在地化
自由軟體的國際化與在地化fweng322
 
台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學fweng322
 
台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式fweng322
 
文件自由日
文件自由日文件自由日
文件自由日fweng322
 
自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享fweng322
 
那些年,我學到的程式設計教育
那些年,我學到的程式設計教育那些年,我學到的程式設計教育
那些年,我學到的程式設計教育fweng322
 
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in TaiwanLibreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwanfweng322
 
軟體自由*自由軟體
軟體自由*自由軟體軟體自由*自由軟體
軟體自由*自由軟體fweng322
 
數位路平
數位路平數位路平
數位路平fweng322
 
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015fweng322
 
台北市研習_LAMP_20140815
台北市研習_LAMP_20140815台北市研習_LAMP_20140815
台北市研習_LAMP_20140815fweng322
 
TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發fweng322
 
新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹fweng322
 

More from fweng322 (16)

LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in TaiwanLibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
LibreOffice Conference 2016 -- ODF/LibreOffice Migration in Taiwan
 
LibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About MacrosLibreOffice Conference 2016 -- Something About Macros
LibreOffice Conference 2016 -- Something About Macros
 
Migrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in TaiwanMigrating ODF and LibreOffice in Taiwan
Migrating ODF and LibreOffice in Taiwan
 
自由軟體的國際化與在地化
自由軟體的國際化與在地化自由軟體的國際化與在地化
自由軟體的國際化與在地化
 
台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學台中資訊組長研習 -- 不插電的資訊科學
台中資訊組長研習 -- 不插電的資訊科學
 
台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式台中資訊組長研習 -- ODF 開放文件標準格式
台中資訊組長研習 -- ODF 開放文件標準格式
 
文件自由日
文件自由日文件自由日
文件自由日
 
自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享自由軟體 & ezgo -- A+A space 分享
自由軟體 & ezgo -- A+A space 分享
 
那些年,我學到的程式設計教育
那些年,我學到的程式設計教育那些年,我學到的程式設計教育
那些年,我學到的程式設計教育
 
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in TaiwanLibreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
Libreoffice conference: Successful stories: Migrating Libreoffice in Taiwan
 
軟體自由*自由軟體
軟體自由*自由軟體軟體自由*自由軟體
軟體自由*自由軟體
 
數位路平
數位路平數位路平
數位路平
 
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
Why We Insist Promoting FOSS in Taiwan's School -- Gnome Asia 2015
 
台北市研習_LAMP_20140815
台北市研習_LAMP_20140815台北市研習_LAMP_20140815
台北市研習_LAMP_20140815
 
TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發TPET6 噗浪客年會心跳300 -- ezgo 開發
TPET6 噗浪客年會心跳300 -- ezgo 開發
 
新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹新北市教師工作坊 -- Bash script programming 介紹
新北市教師工作坊 -- Bash script programming 介紹
 

成大資工自由軟體開發與社群發展課程

Editor's Notes

  1. 「選項」兩個字的處理跟下一張「魔法門」比較
  2. 1. 簡體字 2. 魔法門的圖是重畫的
  3. Apple II vs 宏碁小教授 國內有軟體公司,但還是以國外為多
  4. 日期、數字的表示法,特別是在會計之類的軟體,弄錯問題就大條
  5. 詢問大家知不知道如何進行自由軟體的在地化
  6. * 選單為基本精神 * 操作上近似 Windows 但又要做出區隔