第一个GTK程序:中国农历 之四

处理gettext与多国语言,我们先需要在configure.ac中增加一个AM_GNU_GETTEXT宏,如下

# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_MAKE_SET

AM_GNU_GETTEXT([external])

定义了external就不需要在当前目录下面有intl目录了,当然intl目录也是可以通过AM_GNU_GETTEXT_INTL_SUBDIR来指定另外名称的

然后我们执行gettextize生成config.rpath以及po/m4目录下面的文件。同时会往configure.ac的AC_CONFIG_FILES中增加一个输出po/Makefile.in

执行此命令时,带参数--symlink就是链接到系统中而不是拷贝到本地

当前版本的gettextize会提示下一步需要做些什么事情,最关键的是在po目录下面将一个Makevars.template拷贝为Makevars,内容是不需要修改的

由于glade-2中使用的gettext宏是GET_PACKAGE,因此,我们在configure.ac中增加定义

GETTEXT_PACKAGE=lunarcalendar
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
                   [GETTEXT lunarcalendar])

做完这些操作之后,我们需要再执行autogen.sh脚本,然后再执行configure,再调用make程序

此时的全部代码打包:lunarcalendar.0.0.3.zip

这时候,编译后会在po目录下生成lunarcalendar.pot文件,基于此文件,我们可以对源代码的字符串进行翻译

比如,我们翻译出一个zh_CN.po文件

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: lunarcalendar 0.1\n"
"Report-Msgid-Bugs-To: eagle_xmw@yahoo.com.cn\n"
"POT-Creation-Date: 2013-04-21 03:02+0800\n"
"PO-Revision-Date: 2013-04-21 03:07+0800\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <eagle_xmw@yahoo.com.cn>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"


#: src/interface.c:39
msgid "Lunar Calendar"
msgstr "中国农历"

#: src/support.c:90
#: src/support.c:114
#, c-format
msgid "Couldn't find pixmap file: %s"
msgstr "无法打开图片文件: %s"

然后,我们还要再在po目录下创建一个LINGUAS文件,文件的内容只有一行"zh_CN"

再调用autogen.sh重新生成Makefile等之后,再调用configure及make,就可以将刚才增加的zh_CN.po自动编译为zh_CN.gmo了

此时的全部代码打包:lunarcalendar.0.0.4.zip

至此,我们的工程是可以编译、链接,也可以安装了,下一步是生成.desktop文件

原文地址:https://www.cnblogs.com/eaglexmw/p/3033424.html