工程地址

automake语言国际化

最初工程目录结构

$ ls -l
total 16
drwxrwxr-x. 2 fedora fedora 4096 May 10 10:38 build-aux
drwxrwxr-x. 2 fedora fedora 4096 May 10 10:38 m4
drwxrwxr-x. 2 fedora fedora 4096 May 10 10:38 po
drwxrwxr-x. 2 fedora fedora 4096 May 10 10:38 src
$ ls -l src/
total 4
-rw-rw-r--. 1 fedora fedora 572 May 10 10:38 main.cpp

源文件剖析

$ cat src/main.cpp
#include <glib/gi18n.h>
#include <locale.h>
#include <stdio.h>
#include "config.h" int main(int argc, char *argv[])
{
setlocale (LC_ALL, "");
bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
printf(_("gettext"));
return 0;
}

将工程改造成automake

运行autoscan & 修改configure.ac文件

与中级篇不同点

  • 使用AM_GLIB_GNU_GETTEXT宏代替AM_GNU_GETTEXT宏
  • 使用PKG_CHECK_MODULES获取glib-2.0库的编译连接参数

运行aclocal

生成autoconf所需的宏文件aclocal.m4

$ aclocal

运行autoconf

根据configure.ac生成configure脚本

$ autoconf

运行autoheader

生成 config.h.in 文件,用于生成 config.h 文件,此文件保存了configure.ac中定义的宏,可被程序使用

$ autoheader

编写Makefile.am

顶层目录的Makefile.am
  • Makefile.ambuild-aux/gitlog-to-changelog 以及 AUTHORS.in 取自 Virt Viewer ,可以当做模板来使用
  • 一般情况下我们只需要根据 configure.acAC_CONFIG_FILES 来修改 Makefile.am 模板的 SUBDIRS 来决定需要生成Makefile的子目录,每个Makefile.am只需要包含子目录即可,如果有嵌套目录需要生成Makefile,则在子目录的Makefile.am设置 SUBDIRS
  • 这边的Makefile.am比中级篇更加简洁
$ cat Makefile.am
NULL = ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src po EXTRA_DIST = \
build-aux/gitlog-to-changelog \
AUTHORS.in \
$(NULL) DISTCLEAN_FILES = \
$(NULL) MAINTAINERCLEANFILES = \
$(srcdir)/AUTHORS \
$(srcdir)/INSTALL \
aclocal.m4 \
config.h.in \
m4/intltool.m4 \
m4/libtool.m4 \
m4/ltoptions.m4 \
m4/ltsugar.m4 \
m4/ltversion.m4 \
m4/lt~obsolete.m4 \
build-aux/compile \
build-aux/config.guess \
build-aux/config.rpath \
build-aux/config.sub \
build-aux/depcomp \
build-aux/install-sh \
build-aux/ltmain.sh \
build-aux/missing \
$(NULL) dist-hook: gen-ChangeLog gen-AUTHORS # Generate the ChangeLog file (with all entries since the switch to git)
# and insert it into the directory we're about to use to create a tarball.
if OS_WIN32
.PHONY: gen-ChangeLog gen-AUTHORS nsis
else
.PHONY: gen-ChangeLog gen-AUTHORS
endif gen-ChangeLog:
if test -d .git || test -d ../.git; then \
$(top_srcdir)/build-aux/gitlog-to-changelog \
> $(distdir)/cl-t; \
rm -f $(distdir)/ChangeLog; \
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
fi gen-AUTHORS:
$(AM_V_GEN)if test -d $(srcdir)/.git; then \
out="`cd $(srcdir) && git log --pretty=format:'%aN <%aE>' | sort -u`" && \
perl -p -e "s/#authorslist#// and print '$$out'" \
< $(srcdir)/AUTHORS.in > $(distdir)/AUTHORS-tmp && \
mv -f $(distdir)/AUTHORS-tmp $(distdir)/AUTHORS ; \
fi if OS_WIN32
.PHONY: nsis
nsis:
make -C $(builddir)/data virt-viewer-$(VERSION).exe
endif
src目录的Makefile.am
$ cat src/Makefile.am
NULL =
SUBDIRS = EXTRA_DIST = \
$(NULL) DISTCLEANFILES = bin_PROGRAMS = glibGettext
glibGettext_LDADD = glibGettext_CPPFLAGS = \
$(NULL) glibGettext_CXXFLAGS = -ggdb3 -Wall -MMD -fpermissive -g
MAINTAINERCLEANFILES = COMMON_LIBS = \
$(GLIB2_LIBS) \
$(NULL) # linux下程序运行的当前目录不确定所以无法使用相对路径
if !OS_WIN32
COMMON_CPPFLAGS = \
-DLOCALE_DIR=\""$(datadir)/locale"\" \
$(GLIB2_CFLAGS) \
$(NULL)
else
COMMON_CPPFLAGS = \
-DLOCALE_DIR=\""./../share/locale"\" \
$(GLIB2_CFLAGS) \
$(NULL)
endif glibGettext_SOURCES = \
main.cpp \
$(NULL) glibGettext_LDFLAGS = \
$(COMMON_LIBS) \
$(NULL) glibGettext_CPPFLAGS += \
$(COMMON_CPPFLAGS) \
$(NULL)

创建automake必要文件

COPYING 文件可以从一些开源项目下面复制过来,其他文件NEWSREADMEChangeLogAUTHORS使用 touch 命令生成

运行automake

生成 Makefile.in 文件

$ automake -a

编辑po/POTFILES.in文件

填入需要进行国际化字符转换的源文件,即包含文件中包含 _() 的源文件

$ cat po/POTFILES.in
src/main.cpp

执行autogen.sh

  • autogen.sh 取自 Virt Viewer ,可以当做模板来使用
  • 根据实际情况修改 echo "Now type 'make' to compile glibGettext." 即可

生成po文件

  • 执行 make -C po/ update-po 生成程序对应的POT文件 gettext.pot
  • 在po目录下执行 msginit --locale zh_CN.utf8 生成对应语言的PO文件
  • 编辑PO文件完成翻译
  • 创建 LINGUAS 文件,并填入PO文件中的"Language"属性
  • 此处和中级篇一致

运行make

  • 不需要拷贝gettext.h文件
# Linux平台下
$ ./autogen.sh
$ make
$ sudo make install
# windows平台下
$ ./autogen.sh
$ mingw32-configure
$ make
$ sudo make install

测试glibGettext

# Linux平台下
$ LANG=en_GB glibGettext
English
$ LANG=zh_CN glibGettext
中文
  • 怎么把fedora下编译的程序部署到windows平台会在其他章节介绍
# windows平台下
C:\Program Files (x86)\test\bin>set LANG=en_GB
C:\Program Files (x86)\test\bin>glibGettext.exe
English

最新文章

  1. 修改Matlab 2012b默认工作路径
  2. [USACO2004][poj2375]Cow Ski Area(在特殊图上用floodfill代替强联通算法)
  3. Unity3D 新人学习的一点感想
  4. 为什么margin-top不是作用于父元素
  5. Android开发系列之事件拦截机制
  6. Echarts数据可视化series-effectscatter特效散点图,开发全解+完美注释
  7. 报表开发之扩展GROUP BY
  8. 修改hosts 流畅使用coursera
  9. 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
  10. Hadoop家族
  11. 配置使用dwr完成收邮件提示
  12. 《ASP.NET Core In Action》读书笔记系列二 ASP.NET Core 能用于什么样的应用,什么时候选择ASP.NET Core
  13. iOS学习——(转)NSObject详解
  14. ORACLE更新数据时如果有就更新没有就插入
  15. 什么是url?
  16. Jensen不等式
  17. HDU 2093 考试排名 模拟题
  18. 安装ubuntu后,你的屏幕尺寸太小,无法设置,该怎么解决
  19. [转]NSIS常用代码整理
  20. 矩阵快速幂——POJ3070

热门文章

  1. 我的Android进阶之旅------>如何在多个LinearLayout中添加分隔线
  2. global 全局变量的用法
  3. myeclipse破解补丁激活失败方法
  4. maven GroupID和ArtifactID
  5. struts2 codebehind + actionPackages 实现Action零配置
  6. mooc_java 集合框架中 学生所选课程2Map&amp;HashMap
  7. python循环次数的使用
  8. laravel基础课程---9、视图(lavarel的模板语法和tp相比怎样)
  9. [CTSC 2012] Cheat
  10. 系列文章--突袭HTML5