More Related Content
Similar to 2016-04-07-清大-國際化開源專案技術實務與經驗分享 (20)
2016-04-07-清大-國際化開源專案技術實務與經驗分享
- 1. GH – "Global" Hack!
國際化開源專案:技術實務與經驗分享
2016-04-07 | PCMan@NTHU
洪任諭 <http://pcman.im/>
- 2. 2
講者經歷
•
PCMan BBS/telnet client 全系列
•
LXDE / LXQt 桌面環境
•
新酷音輸入法 Windows port (C++ & Win32 IME & TSF)
•
PIME 輸入法平台 (C++ & python)
•
IE Tab Mozilla Firefox plugin/ 套件 (C++ & ATL &
Javascript)
• 前風濕免疫科醫師
• 台大資訊工程所碩士班
- 5. Unicode 編碼
● UTF-16 (byte order: BE or LE)
● UTF-32 (BE or LE)
● UTF-8 (no byte order)
● BOM (byte order mark)
https://en.wikipedia.org/wiki/Byte_order_mark
- 6. UTF-8
● Multi-byte characters ( 中文 3 - 6 bytes)
● 無 byte order 問題,適合 data exchange
– 但 Windows 下還是經常要求需要加 BOM
● ( 部份 ) 相容原有 C 語言 strxxx() 函數,但 ...
– 字元數 != 位元組數 (strlen)
– 移到下一字元,不能直接 pointer++
– 通常需專用 library 處理 ( 例 glib 的 g_utf8_* API)
● g_utf8_next_char()
● g_utf8_strlen()
● g_utf8_strstr()
- 7. 各種編碼轉換
● GNU iconv: command line tool and library
– https://www.gnu.org/software/libiconv/
● LibICU (C++ lib, 龐大 )
– http://site.icu-project.org/
● 繁簡中文轉換 : OpenCC
– https://github.com/BYVoid/OpenCC
- 8. Locale
● Locale 名稱 :
– 國名 _ 地區 . 編碼 ( 例 : zh_TW.UTF-8)
– Windows 有時用 LCID / LANGID
● 數字格式
● 字元分類 / 大小寫轉換
● 日期時間
● 排序 (collate)
● 金額 (currency)
- 9. POSIX LC_* 環境變數
● LANGUAGE
● LC_ALL: override 其他 LC_* 變數
● LC_*
– LC_COLLATE: 字元排序
– LC_CTYPE: 字元分類 / 大小寫轉換
– LC_MESSAGES: 文字訊息
– LC_NUMERIC: 數字格式
– LC_TIME: 日期時間
● LANG
● POSIX setlocale() 函數
- 10. 字串排序
● strcmp()? ASCII code 字典序? → NO!!!
● 符合語言學的順序 (collate)
– LibICU: Ucollator
– Glib: g_utf8_collate() (fast approximation)
– Qt 5: QCollator (libICU based)
– POSIX: strcoll()
- 11. RTL Layout 問題 (BiDi 支援 )
● 文字 ( 例 : 希伯來、阿拉伯 )
● 圖示 ( 箭頭方向 )
● UI layout
- 12. 翻譯字串
● GNU gettext
– API: gettext(), dgettext()...
– *.po file → *.mo file
● Qt Linguist
– QObject::tr()
– *.ts → *.qmo
● Android:
– strings.xml
- 14. GNU gettext
●
不同語言複數型 (plural forms) 不同, code 不能寫死
● API: ngettext (msgid1, msgid2, n)
– msgid1: 英文單數型 (n=1)
– msgid2: 英文複數型 (n > 1, 通常是字尾加 s)
– n: 數字
●
例 : ngettext ("%d file removed", "%d files removed", n)
●
C printf() 參數順序,翻譯後可能改變
– 英文 : "String `%s' has %d characters"
– 德文 : "%d Zeichen lang ist die Zeichenkette `%s'"
– GNU 擴充 : "%2$d Zeichen lang ist die Zeichenkette `%1$s'"
https://www.gnu.org/software/gettext/manual/gettext.html
- 17. 文字輸入
●
中日韓 – 輸入法 (input method editor)
– Windows: TSF, imm32 (deprecated)
– UNIX-like:
●
底層 : gtk+ 2/3 IM modules, Qt 4/5 IM modules, xinput
●
框架 : ibus, fcitx, scim, gcin, uim...
●
西方國家 – Keyboard layouts
– 特殊按鍵:
● Alt-Gr key 常用右 Alt ( 例 : AltGr + C → ©, AltGr + 4 → € )
●
Dead key ( 例 : 法文 ` A → à )
● 設定程式熱鍵小心和輸入法衝突
- 23. 23
國際化,你需要 ...
●
英文專案首頁 ( 必備 !)
●
英文 source code 註解和文件
● 良好的多國語言支援
●
Mailing list ( 溝通、克服 Time-zone 問題 )
●
Packages ( 和主流 distros 合作 , 建 ppa)
● 傳教士
●
運氣,以及 coding 直到世界末日的堅持
- 24. 24
免費廣告通路
●
各大 Linux distro 之討論區及 mailing list
●
阿宅新聞 Slashdot 投稿
●
各大 free software 下載網站 ( 例 :qt-apps.org)
●
寫 Blog 等別人轉貼
●
Linux Action Show
●
投稿 conference
- 25. 25
如何開始 ?
● 公開自己的專案
– 注意 coding style, license (MIT, GPL, LGPL, Apache?...)
– 多寫文件 / comments
– Marketing!
● 加入現有的專案
– 下載 source code
– 回報 bug
– 貢獻 Patch / 文件
– Mailing list / IRC 討論
← 免費的最難賣