step1.先設定gStarDictDataDir,用set_data_dir()
step2.GETTEXT_PACKAGE在win32intl.h的標頭檔中定義#define GETTEXT_PACKAGE "stardict",gStarDictDataDir是step1中設定的,G_DIR_SEPARATOR_S是目錄分隔符號,c_str()將string物件轉會成C語言形式的字串常數,STARDICT_LOCALEDIR這是在Makefile.am中定義好的
-DSTARDICT_LOCALEDIR=""$(prefix)/$(DATADIRNAME)/locale"" ,bindtextdomain函式用於指定包含不同語言域名的訊息目錄。
bind_textdomain_codeset用來指定訊息目錄的domainname域名之輸出字元集。
get_user_config_dir()就字面上來看,應該是取得使用者設定路徑。在utils.cpp中有函式定義,我們另外開一篇文章來說明。
std::string userdir(get_user_config_dir());這個userdir跟下一行的userdir.c_str(),我有點不懂這是幹嘛的?
後來查到這個好像是How to convert Cstring to string的一種用法,看來我對C++真的是很淺喔!
c_str的用法,參考標準 C++ 類別的成員函式 c_str()。
g_file_test、g_mkdir參考GLib參考手冊的File Utilities。
S_IRWXU定義在sys/stat.h裡,值是_S_IRWXU,而_S_IRWXU定義是(_S_IREAD | _S_IWRITE | _S_IEXEC),另外這三個常數的定義是這樣:
#define _S_IEXEC 0x0040
#define _S_IWRITE 0x0080
#define _S_IREAD 0x0100
g_warning參考GLib核心應用支援的g_warning。
g_thread_init參考GLib核心應用支援的g_thread_init。
#if defined(_WIN32) || defined(CONFIG_GTK) || defined(CONFIG_MAEMO)這一行的定義,我找不太到,但是MAEMO可能是基於 Linux Debian 的系統平台,由諾基亞公司為了智慧型手機及Internet Tablet所開發的有關。
gtk_set_locale的使用可以參考[GTK+]hello範例,說明可以看參考手冊gtk_set_locale 。
gtk_init參考GTK+參考手冊 » GTK+核心參考 » 主迴圈跟事件的gtk_init。
#ifdef CONFIG_GPE
if (gpe_application_init (&argc, &argv) == FALSE)
exit (1);
#endif
在瞭解上面這幾行程式之前,大家可能需要先瞭解什麼是GPE,才能知道這個函式的功能,GPE掌上電腦環境, GPE Palmtop Environment 是一個計劃為執行Linux作業系統的PDA等掌上裝置提供自由圖形使用者介面的項目。GPE並不是一個單一的軟體,但可以為執行Linux的掌上裝置提供如個人資訊管理系統 (PIM)、音樂播放、電子郵件及網頁瀏覽等功能。看起來它是執行在Linux上的,支援的裝置有
以下平台上的嵌入式Linux發行版捆綁了GPE:
看起來這幾台並不是我喜歡的,所以我應該不會再去添購這些手機,我的重點還是想在Android、Symbian或Windows Mobile之類的系統上開發,所以以後stardict要移植到這一類的系統上,少不了又要一場混戰,或許將GPE移到Android上也是可行的吧,都一樣是Linux的系統,再看看吧!
gpe_application_init這個函式的使用如下:
#include <gpe/init.h> extern gboolean gpe_application_init (int *argc, char **argv[]);
它是直接用來取代gtk_init的,它會呼叫gtk_init跟
gtk_set_locale,建立
~/.gpe
目錄,初始化內部需要的模組,假如初始化成功傳回TRUE,另外你在編譯連結的時候,要使用-lgpewidget
到你的link命令中。
g_log_set_handler參考GLib參考手冊 » GLib核心應用支援 » 訊息紀錄。
g_set_print_handler參考GLib參考手冊 » GLib核心應用支援 » 訊息輸出跟除錯函式。
GOptionContext參考GLib參考手冊 » GLib實用函式集 » Commandline option parser。
g_option_context_new參考GLib參考手冊 » GLib實用函式集 » Commandline option parser。
g_locale_from_utf8…這一篇從2010/03/11寫來,歷經了7個月了,很多函式中譯都慢慢地在補齊,過程是個很漫長的路程,今天因為這個函式,找到了stardict2.4.8的main函数简要说明与注释這一篇,總算有直接可以跳的方式,可以來幫助瞭解研究stardict這隻程式,我把它繁體化,並且過濾掉行號,把目前新版有用的程式碼轉貼到下面,並以part1告一段落,供大家研究:
Stardict的入口函式main函式在stardict.cpp的1654行(目前版本在2426),這個函式涉及到跨平台、軟體國際化及CORBA的C/S模式,以下是其簡要說明和註釋:
// 將utf8字串轉換為系統環境的編碼方式
gchar *title=g_locale_from_utf8(_("StarDict"), -1, NULL, NULL, NULL);
HWND ll_winhandle = FindWindowA(0, title); // 查詢StarDict程序是否已執行
g_free(title);
if (ll_winhandle > 0) {
if (IsIconic(ll_winhandle)) // 判斷視窗是否最小化
ShowWindow(ll_winhandle,SW_RESTORE); //從任務裡恢復視窗顯示
else
SetForegroundWindow(ll_winhandle); // 啟用該視窗
return EXIT_SUCCESS;
}