当前位置:  技术问答>linux和unix

gtk+编程中的国际化问题

    来源: 互联网  发布时间:2016-04-12

    本文导语:  小子写了一个gtk程序,打算国际化一下 步骤都没有错  但是把语言从英语转成简体中文后,再运行程序,还是没有变化 但是如果用LC_ALL=zh_CN.UTF-8 ./project 运行后,又可以了 这又是怎么回事呢? 我是在SUSE 企业...

小子写了一个gtk程序,打算国际化一下

步骤都没有错 

但是把语言从英语转成简体中文后,再运行程序,还是没有变化

但是如果用LC_ALL=zh_CN.UTF-8 ./project 运行后,又可以了

这又是怎么回事呢?

我是在SUSE 企业版9下编的

有没高人把编译过可行的代码弄一份给小子看一下,或者有出现这种问题解决的高人不吝赐教
小子感激不尽~~~~

|

Autoconf的多国语言支持




参考:http://cslcy.blogchina.com/cslcy/4475104.html
http://blog.csdn.net/comcat/archive/2007/04/11/1560161.aspx

autogen.sh :

echo "Running libtoolize --force --copy ..."
libtoolize --force --copy
echo "Running glib-gettextize --force --copy ..."
glib-gettextize --force --copy
echo "Running intltoolize --force --copy ..."
intltoolize --force --copy

echo "Running aclocal ..."
aclocal
echo "Running autoheader ..."
autoheader
echo "Running autoconf ..."
autoconf
echo "Running automake --add-missing --copy ..."
automake --add-missing --copy
echo "Running ./configure"
./configure

0. 增加多国语言的命令:

libtoolize --force --copy
glib-gettextize --force --copy
intltoolize --force --copy
这些是有先后顺序的。

libtool:libtool  是一组shell 脚本,它运行于Unix 和Unix-like系统上,为程序员提供统一的、可移植的、简化了的,创建、使用共享库的界面。这样程序员就可以便捷地编制在各种Unix平台上都可以运行的动态连接库了。   
 
gettext:gettext提供了编程界面、实用工具,它帮助程序员编写支持多语言的应用程序。
  

运行上面的3条命令需要在configure.in中加入:
AC_PROG_LIBTOOL
IT_PROG_INTLTOOL

然后运行aclocal,autoheader,autoconf,automake,

Makefile.am文件中的加上po
SUBDIRS = docs glade pixmaps po src  

最后会提示
sed: can't read ./po/POTFILES.in: No such file or directory,
这时候再在configure.in中的AC_CONFIG_FILES加入
po/Makefile.in,

#native language support
GETTEXT_PACKAGE=AC_PACKAGE_NAME
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [GETTEXT package name])
AM_GLIB_GNU_GETTEXT

最后在po目录下增加个空的POTFILES.in
重新运行autogen.sh

其他的参见下面的文字,这是以前写的,也许更仔细点,我没有好好整理


1.在configure.in文件中增加:

IT_PROG_INTLTOOL([0.35.0])
AM_PROG_LIBTOOL


2. configure.in中添加

# Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MMAP
AC_FUNC_SELECT_ARGTYPES
AC_FUNC_STRFTIME
AC_CHECK_FUNCS([memset munmap select setlocale strcasecmp strerror])

AC_CONFIG_FILES([docs/Makefile
                 glade/Makefile
                 pixmaps/Makefile
 po/Makefile.in //在这里添加这个,要不然配置不了,注意是Makefile.in而不是Makefile
                 src/Makefile
 Makefile])
AC_OUTPUT


3. 执行autogen.sh

echo "Running libtoolize --force --copy ..."
libtoolize --force --copy
echo "Running glib-gettextize --force --copy ..."
glib-gettextize --force --copy
echo "Running intltoolize --force --copy ..."
intltoolize --force --copy

echo "Running aclocal ..."
aclocal
echo "Running autoheader ..."
autoheader
echo "Running autoconf ..."
autoconf
echo "Running automake --add-missing --copy ..."
automake --add-missing --copy
echo "Running ./configure"
./configure

4. Makefile.am文件中的加上po
SUBDIRS = docs glade pixmaps po src


5。切换到po目录

创建POTFILES.in和LINGUAS文件,内容分别为

(POTFILES.in)
# List of source files containing translatable strings.
[encoding: UTF-8]

glade/wbuscanner.glade
src/main.c

(LINGUAS)
# please keep this list sorted alphabetically
#
zh_CN


make update-po
mv wbuscanner.pot zh_CN.po
然后将zh_CN.po中需要翻译的内容进行翻译
make update-po
make

PS:记得在这里touch个ChangeLog,要不然make dist的时候会出错


多国语言文件将会被安装到  /usr/local/share/locale/zh_CN/LC_MESSAGES/wbuscanner.mo




6.main.c


#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif 

/*
 * Standard gettext macros.
 */
#ifdef ENABLE_NLS
#  include 
#  undef _
#  define _(String) dgettext (PACKAGE, String)
#  ifdef gettext_noop
#    define N_(String) gettext_noop (String)
#  else
#    define N_(String) (String)
#  endif
#else
#  define textdomain(String) (String)
#  define gettext(String) (String)
#  define dgettext(Domain,Message) (Message)
#  define dcgettext(Domain,Message,Type) (Message)
#  define bindtextdomain(Domain,Directory) (Domain)
#  define _(String) (String)
#  define N_(String) (String)
#endif


然后在main()中:
#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
#endif

在gtk_init之后加入就可以主动切换到中文模式
//切换到中文模式
//setlocale(LC_ALL,"zh_CN.UTF-8");

7。需要翻译的字符串写成 _("hello")


最后记得在顶层MAKEFILE.am上加上

EXTRA_DIST += 
intltool-extract.in 
intltool-merge.in 
intltool-update.in 

要不然make dist后再解压编译的话就编译不了了

记得在翻译文件后在.po种更改
"Content-Type: text/plain; charset=CHARSETn"为
"Content-Type: text/plain; charset=UTF-8n"

    
 
 

您可能感兴趣的文章:

  • GTK国际化问题
  • gtk+国际化问题
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • 本人刚学gtk编程,留下油箱,欢迎喜欢gtk编程的朋友和我交流啊!!!!
  • Redhat linux9.0 下Gtk+编程的#include <gtk/gtk.h>问题
  • 我想学习GTK+2.0,请问如何准备GTK编程环境???
  • gtk编程问题,如何在一个线程中向gtk控件发送一个expose_event消息
  • gtk编程中关于gtk_widget_show函数的问题
  • 请教linux下的编程的选择:我听说有gtk+gnome的编程,也有kde里的 什么编程,到底应该选择哪个呢?好象一个是技术好一点,一个是市场占有
  • gtk编程的报错了
  • GTK 界面编程有问题,求解
  • GTK编程问题
  • GTK+编程用什么函数实现窗口的最大化最小化控制?
  • 请推荐一本GTK+编程书籍
  • 一个关于gtk编程问题?
  • gtk编程问题2?
  • gtk编程如何改变创建窗口的大小?
  • 请问各位大虾,用gtk编程如何让图片缩放,旋转?
  • X Window编程Qt,GTK哪个比较好
  • linux下的gtk编程
  • 请问GTK下编程,如何将一个图片设计成一个按钮?谢谢!
  • gtk编程求助:程序里打开了一个子窗口,如何等子窗口关闭后再继续往下执行?
  • 在windows下用Gtk编程,如何配置
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 【重要】gtk+ 编译gtk+的问题,不同于一般gtk的搭建--1000分,问题解决了,开号给分,决不食言!大家都来看看
  • 关于gtk的目录问题,我的目录是 gtk-2.0/gtk/gtk.h ??
  • [GTK] gtk最小化问题与恢复问题
  • gtk for win 和 gtk for linux 下的程序问题?
  • GTK+ gtk_tree问题
  • 【gtk+】初学gtk+,请教一个问题
  • 【gtk】关于gtk布局问题
  • 关于GTK中gtk_widget_hide()的问题
  • 新手问题:gtk+-2.0.0.tar.gz和gtk+-2.0.0.tar.bz2这两个文件是什么关系啊?
  • gtk+编译没有问题,运行的时候出问题,就是这句gtk_widget_show_all(window);请各位帮忙解答,谢谢
  • gtk的问题.
  • gtk问题!
  • GTK编译问题.
  • gtk 窗口模式 怪问题(100分)
  • gtk+2.0安装问题
  • GTK+可执行文件运行环境问题
  • 关于GTK的问题。。。。。帮帮忙!!!
  • gtk+ 简单问题
  • gtk问题
  • gtk 中回调函数传值问题
  • gtk 和 gtk+ 有什么区别?
  • centos5.4中安装gtk时,yum库最新版是gtk2.10,如何更新yum库安装gtk2.12
  • 我使用GTK+2.0写界面程序时,怎么找不到gtk.h文件?
  • GTK窗口前端显示及GTK窗口闪烁
  • 请问各位大虾,用gtk编程如何让图片缩放,旋转? iis7站长之家
  • 【GTK】GTK中有没有这个widget?
  • 大家好,想知道gtk与gtk+有什么区别?
  • gtk中如何获取gtk_text_view中的输入内容?
  • GTK+中类似gtk_hbox_new这样的给构件分配内存的函数 为什么不用手动释放?
  • 请问:gtk有哪些信息啊,delete_event是不是个信息啊,哪有gtk信息的资料啊,帮助上有吗?
  • 高分请教,如何能够使GTK能够在gtk生成的窗口里面放一个其它程序的窗口?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3