Anjuta 和国际化编程设置- -出现问题
用Anjuta可以工程创建精灵可以方便的生成一个工程,虽然不一定要用anjuta来编程(本人使用Emacs),但是也可以稍微利用一下它这个工程创建精灵的作用。
选择支持本地语言可以让工程创建时增加一个setup-gettext脚本,运行后会提示:
autopoint --force
autopoint: *** Missing version: please specify in configure.in through a line 'AM_GNU_GETTEXT_VERSION(x.yy.zz)' the gettext version the package is using
autopoint: *** Stop.
编辑一下configure.in 加入自己的gettext 的version信息。我的是AM_GNU_GETTEXT_VERSION("0.15")
dnl Languages which your application supports
ALL_LINGUAS=""
AM_GLIB_GNU_GETTEXT
如果需要加入zh_CN的支持
就改成 ALL_LINGUAS="zh_CN"
我习惯改成AM_GNU_GETTEXT
另外在最后在AC_OUTPUT 下加上 intl/Makefile
还要编辑Makefile.am在SUBDIRS里加上intl
编辑完后运行 setup-gettext 脚本。
拷贝生成一堆东西过来。比如m4目录和intl目录。
图形编程的时候要这样:
先给一个函数方便大家:
static void
setup_i18n (void)
{
gtk_set_locale ();
bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
bind_textdomain_codeset (PACKAGE, "UTF-8");
textdomain (PACKAGE);
}
在主程进入时调用一下。
程序里还可以声明一句这个:
#define _(String) gettext(String)
#define gettext_noop(String) (String)
然后把需要翻译的字符串都如下面这样写:
gtk_window_set_title(GTK_WINDOW(opwin),_("General Options"));
程序写差不多了进入po目录
运行make update-po
如果报错说需要Changelog啥的就touch一个出来。没什么影响。
po目录下就会有一个pot文件,名称就是你的工程名字。
我们把这个pot文件复制成zh_CN.po
然后编辑它,补全所有的头信息。
最关键的是Charset,写charset=UTF-8。
然后开始翻译了。
注意这个po文件的编码一定要是UTF-8。
可以使用leafpad之类的编辑器存程UTF-8 编码的文件。
然后在po里面make一下就生成了一个gmo文件。
最后make install你的软件
运行一下,可以看到你的翻译信息在图形界面上显示了。
大功告成。
********************************************************
问题:这是一篇原文,但是我按照上面的说明,在po文件夹中执行make update-po时候报错
错误消息如下:
[root@FC5TEST po]# make update-mo
make: *** No rule to make target `Makevars', needed by `Makefile'. Stop.
什么原因呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
现在情况是这样的,如果按照文档作修改,configure。in,Makefile。am,那么在po文件夹用make update-po就会提示什么没有生成Makevars的Makefile规则之类的,如果什么都不修改,直接建立项目后,然后再po文件夹用make update-po就可以生成一个pot文件,当然pot是后缀,然后再我把这个pot拷贝一份叫做zh_CN。po,然后编辑里面msgstr,就是被翻译部分,保存后执行make命令,此时报错为:
nothing to be done for 'all'
各位,有什么高招马?
帮忙看看
我把那个intl/Makefile改成intl/Makefile。in就生成了pot文件,但是下一步是用make想生成gmo文件时候报错,说:Nothing to be done for 'a11'