免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2524 | 回复: 6
打印 上一主题 下一主题

gettext无法提取翻译信息,求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-09 11:02 |只看该作者 |倒序浏览
用glade+anjuta开发,glade画界面,anjuta就会自动生成main.c callback.c interface.c 和support.c四个c文件,还有其他

我把我的这两个main。c,callback.c文件贴出来

callback.c

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <gnome.h>

#include "callbacks.h"
#include "interface.h"
#include "support.h"


void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{
char *contp;
contp = gettext("aaa");
GtkWidget *msgbox = gnome_app_new("Hello World", "Hello World");
gnome_app_message (GNOME_APP(msgbox), contp);
}


main.c

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <gnome.h>

#include "interface.h"
#include "support.h"

//#define _(String)  gettext(String)
//#define N_(String)  gettext(String)
//#define _ _(String) (String)
int
main (int argc, char *argv[])
{
  GtkWidget *window1;

#ifdef ENABLE_NLS
  bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
  textdomain (GETTEXT_PACKAGE);
#endif

  gnome_program_init (PACKAGE, VERSION, LIBGNOMEUI_MODULE,
                      argc, argv,
                      GNOME_PARAM_APP_DATADIR, PACKAGE_DATA_DIR,
                      NULL);

  /*
   * The following code was added by Glade to create one of each component
   * (except popup menus), just so that you see something after building
   * the project. Delete any components that you don't want shown initially.
   */
  window1 = create_window1 ();
  gtk_widget_show (window1);

  gtk_main ();
  
  setlocale(LC_ALL, "en");
  bindtextdomain("language", "/usr/local/language/share/local/");
  //textdomain("language");
  GtkWidget *msgbox = gnome_app_new("Hello World", "Hello World");
  gnome_app_message (GNOME_APP(msgbox),gettext("Some String"));
  gnome_app_message (GNOME_APP(msgbox),GETTEXT_PACKAGE);
  
// printf(gettext("Some String"));

  return 0;
}

弄好c文件,然后我配置configure安装在/usr/local/language/(因为我的项目名称叫做language,所以我在/usr/local/下建立了一个language目录),然后运行configure,make,make install安装我的程序,然后我再建立/usr/local/language/share/local/en/LC_MESSAGES文件夹,其中local/en/LC_MESSAGES这部分是原来没有的,然后把四个c文件cp到/usr/local/language/share/local/en/LC_MESSAGES,执行xgettext -n *.c这时候生成了messages.po文件,po文件内容如下:
[root@FC5TEST LC_MESSAGES]# cat messages.po
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-08-09 11:07+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: callbacks.c:17
msgid "aaa"
msgstr "bbb"

#: main.c:48
msgid "Some String"
msgstr "ddddd"

然后我再运行msgfmt messages.po就出现了一个提示信息:
[root@FC5TEST LC_MESSAGES]# msgfmt messages.po
msgfmt: messages.po: warning: Charset "CHARSET" is not a portable encoding name.
                              Message conversion to user's charset might not work.
此时我运行我安装后的程序,界面上就有一个button,正常运行后就应该弹出一个message,显示ddddd,然后单击那个button显示bbb,但是现在是运行后没有显示ddddd,点击button时候只是弹出了aaa,而不是我要翻译后的bbb
请各位帮忙,小艾谢谢大家

论坛徽章:
0
2 [报告]
发表于 2006-08-09 11:43 |只看该作者
操作系统是FC5,我在FC4也试过了,同样的提示信息,同样的现象

论坛徽章:
0
3 [报告]
发表于 2006-08-09 11:52 |只看该作者
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Type: text/plain; charset=CHARSET\n"


这些信息的值都是缺省的,需要修改。如果你的翻译是中文的,charset建议为utf-8,同时要注意你的整个文件必须与这里的声明要一致,比如说使用utf-8编码保存。

论坛徽章:
0
4 [报告]
发表于 2006-08-09 13:45 |只看该作者
原帖由 limodou 于 2006-8-9 11:52 发表


这些信息的值都是缺省的,需要修改。如果你的翻译是中文的,charset建议为utf-8,同时要注意你的整个文件必须与这里的声明要一致,比如说使用utf-8编码保存。


1。我想把它变成英文的,或者日文的,那么这个字符集与语言的对应怎么对应?
[root@FC5TEST LC_MESSAGES]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
我把charset变成了en_US.UTF-8,生成mo文件时候还是抱错
2。还有就是你说那些缺省的部分需要修改,是必须的吗?有什么用吗?

论坛徽章:
0
5 [报告]
发表于 2006-08-09 14:06 |只看该作者
我刚才把上面的charset变成UTF-8了,结果那个msgfmt没有问题了,至少没有提示什么出错信息
但是程序运行后,并没有取出那个aaa应该翻译成的字符串bbb
这个mo文件位置应该在哪里?
我的程序安装在/usr/local/language/
我那个mo文件放在下面路径了:
/usr/local/language/share/local/en/LC_MESSAGES/messages.mo
说明一下,local包括local以后都是我自己建立的文件夹,安装时候没有
此时,当按钮单击后弹出的消息框还是aaa
然后我把这个message.mo放在/usr/share/locale/en/LC_MESSAGES/language.mo
同样的现象,还是弹出aaa

论坛徽章:
0
6 [报告]
发表于 2006-08-09 17:13 |只看该作者
看过一些文档后,我把那个mo文件放到了/usr/share/locale/en/LC_MESSAGES/下面,但是运行时还是原来的aaa,不是下面要替换的字串

论坛徽章:
0
7 [报告]
发表于 2006-08-10 08:51 |只看该作者
有人用anjuta开发过吗?有些资料说anjuta就支持i18n国际化,可是我没有找到,只是在新建项目的时候有一个gettext的支持,这有什么用呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP