step1.先设定gStarDictDataDir,用set_data_dir()
step2.GETTEXT_PACKAGE在win32\intl.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;
}