使用anjuta,在新建工程中添加(国际化/本地化)支持(po/i18n)

使用anjuta建立新工程testpo:(starter欢迎页->工程->新建->Generic->工程名称 testpo ->....)

得到文件结构:

.
|-- AUTHORS
|-- COPYING
|-- ChangeLog
|-- Makefile.am
|-- NEWS
|-- README
|-- TODO.tasks
|-- autogen.sh
|-- configure.ac
|-- po
|   |-- ChangeLog
|   |-- LINGUAS
|   `-- POTFILES.in
|-- src
|   |-- Makefile.am
|   `-- main.c
`-- testpo.anjuta

 

下面总结一下,在新建的工程中如何快速添加国际化/本地化支持。

首先,需要在src/Makefile.am中增加:

AM_CPPFLAGS = \
    -DPACKAGE_LOCALE_DIR=\""$(datadir)/locale"\"
#其实就是定义PACKAGE_LOCALE_DIR路径为 /usr/share/locale 在以后代码中用到
 

 

在configure.in中增加:

GETTEXT_PACKAGE=project-name #生成*.mo的名字,一般使用工程名
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package.])
#定义 GETTEXT_PACKAGE 常量,在后面代码中用到

dnl Add the languages which your application supports here.
ALL_LINGUAS="zh_CN" #添加支持的语言,和.po档同名
AM_GLIB_GNU_GETTEXT
 



然后在对应的类 src/main.c 中增加代码:

#include <glib.h> //gtk_init支持
#include <glib/gi18n.h> //包括了本地化的支持函数
#include "config.h" // 包括了GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR这样的常量定义

   int main (int argc, char* argv[])
{ 
    bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); // mo档名,和存放路径
    textdomain (GETTEXT_PACKAGE);
    gtk_init (&argc, &argv);

    printf  (_("po file is working"));
...
}
 

 建立 po/zh_CN.po文件:

# Simplified Chinese translation
# Copyright (C) 2004-2010 socol
# This file is distributed under the same license as package.
#
#
msgid ""
msgstr ""
"Project-Id-Version: potest 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-01-11 00:20+0100\n"
"PO-Revision-Date: 2010-02-08 17:41-0800\n"
"Last-Translator: \n"
"Language-Team: Chinese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ../src/testpo.c:30
#, c-format
msgid "po file is working"
msgstr "po文件起作用了"
   

 

继续执行下面的两个步骤:

1. anjuta: 菜单栏->生成->配置工程->(勾上“重新生成工程”  另外,输入--prefix=/usr) 执行

2. anjuta: 菜单栏->生成->生成工程

3. anjuta: 菜单栏->生成->安装工程

 

终端命令行输入:

testpo

 

结果 :

po文件起作用了
 

 

你可能感兴趣的:(C++,c,C#)