- 论坛徽章:
- 0
|
转载请注明文章出处
http://blog.chinaunix.net/u3/96577/showart_1985170.html
gtk从2.12开始就包含了gtkbuilder,带来了新的特性。
所以新编写的程序我准备用gtkbuilder来构建基础界面。
anjuta的国际化支持,用起来不顺手,那就修改一下
字符串的处理流程 -by redtin
.c --------> .pot ---------> .po ---------> .gmo --------->.mo
提取字符串 翻译 编译成二进制 安装
1 用向导生成一个gtk项目。
修改主文件main.c,去掉对libglade对支持。
注释头文件
//#include
2 在create_window函数中修改
- GladeXML *gxml;
-
- gxml = glade_xml_new (GLADE_FILE, NULL, NULL);
-
- /* This is important */
- glade_xml_signal_autoconnect (gxml);
- window = glade_xml_get_widget (gxml, "window");
为 -by redtin
+ GtkBuilder *builder;
+ GError * gerr = NULL;
+
+ builder=gtk_builder_new();
+ gtk_builder_add_from_file(builder,GLADE_FILE,&gerr);
+ gtk_builder_connect_signals (builder, NULL);
+ window=GTK_WIDGET(gtk_builder_get_object(builder,"window"));
3 为了调试方便,我们定义glade文件地位置
#define GLADE_FILE "(项目名).glade"
到发布对时候可以改成
#define GLADE_FILE PACKAGE_DATA_DIR"/(项目名)/glade/(项目名).glade"
(有些版本的anjuta提供了替换的定义)
4 打开glade文件,在菜单中 Glade -> Versioning 选中 GtkBuilder
下面用来实现国际化
5 打开po目录下的LINGUAS文件,在最后添加zh_CN(保持文件字母序)
6 进入终端,切换到po目录,运行
make update-po
会生成一个(项目名).pot文件。
复制一份
cp (项目名).pot zh_CN.po
-by redtin
7 修改Makefile
在Makefile中加入(可以同时加入Makefile.in.in)
#copy lang.gmo to its bind-text-domain
cpmo:
linguas="$(USE_LINGUAS)"; \
for lang in $$linguas; do \
dir=$(srcdir)/$$lang/LC_MESSAGES; \
$(mkdir_p) $$dir; \
if test -r $$lang.gmo; then \
cp $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
echo "Copied $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
fi; \
done
搜索”all-yes:“,修改为
all-yes: $(CATALOGS) cpmo
如果不修改Makefile可以建立个软链接.
8 main.c中,在 #ifdef ENABLE_NLS 之前,添加
#undef PACKAGE_LOCALE_DIR
#define PACKAGE_LOCALE_DIR "/(项目的绝对路径)/po"
9 编辑po目录下的zh_CN.po文件,把charset=设置成utf-8
10 编辑zh_CN.po,开始翻译。
如果你不想手工翻译,可以使用poedit的TM功能(
见我另一篇文章
)
-by redtin
至此,glade和国际化对修改就全部完成拉。
有剩余体力的童鞋,可以酌情修改anjuta的模板,一劳永逸。在
/usr/share/anjuta/project/gtk
或 -by redtin
/usr/local/share/anjuta/project/gtk
Anjuta 2.27.3.0,Ubuntu9.04
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/96577/showart_1985170.html |
|