- 'gettextize -c --intl'を実行
- Makefile.am中のSUBDIRSに、m4 po intlがなければ追加します。
- main関数があるディレクトリのMakefile.amに以下の行を追加します。
AM_CPPFLAGS=-DLOCALEDIR='"$(localedir)"'
- configure.inのAC_PROG_CCまたはAC_PROG_CPP以降に、
ALL_LINGUAS="ja"
AM_GNU_GETTEXT
LDFLAGS="$LDFLAGS $INTLLIBS"
localedir='${prefix}/share/locale'
AC_SUBST(localedir)
AC_DEFINE(HAVE_CATGETS, 1,
Define as 1 if you have catgets and don't want to use GNU gettext.)
AC_DEFINE(HAVE_GETTEXT, 1,
Define as 1 if you have GNU gettext.)
AC_DEFINE(HAVE_LC_MESSAGES, 1,
Define as 1 if you have LC_MESSAGES.)
AC_DEFINE(HAVE_STPCPY, 1,
Define as 1 if you have stpcpy() function.)
AC_DEFINE(ENABLE_NLS, 1,
Define as 1 if you want to use NLS.)
を追加。
最後の方のAC_OUTPUTに、intl/Makefile po/Makefile.in m4/Makefile がなければ追加。
- poディレクトリのMakevars.templateをMakevarsとしてコピーまたはリネームして下さい。
$ cp po/Makevars.template po/Makevars
- poディレクトリにPOTFILES.inを作成します。
以下のコマンドで自動作成できるでしょう。
$ find src | grep -e ".*\.c$" -e ".*\.h$" > po/POTFILES.in
- srcディレクトリに以下のファイルを'intl.h'として保存して下さい。(http://larse-gtk.hp.infoseek.co.jp/gettext.htmlより引用)
#ifndef __INTL_H__
#define __INTL_H__
#ifdef ENABLE_NLS
# include <libintl.h>
# define _(String) dgettext(PACKAGE,String)
# ifdef gettext_noop
# define N_(String) gettext_noop(String)
# else
# define N_(String) (String)
# endif /* gettext_noop */
#else
# define _(String) (String)
# define N_(String) (String)
# define textdomain(String) (String)
# define gettext(String) (String)
# define dgettext(Domain,String) (String)
# define dcgettext(Domain,String,Type) (String)
# define bindtextdomain(Domain,Directory) (Domain)
#endif /* ENABLE_NLS */
#endif /* __INTL_H__ */
- 国際化したいソースを編集します。
やることは4つあります。
- #include <config.h>を追加
- #include "intl.h" を追加
- 国際化したい文字列""をN_()で囲む。
(例) char *str = "hoge"; --> char *str = N_("hoge");
- 文字列を呼び出している箇所で変数を_()で囲む。
(例) printf("%s\n", str); --> printf("%s\n", _(str));
グローバル変数でなければ、直接
printf(_("hoge\n"));
としても大丈夫ですが、あまりよろしくないようです。
- main関数のあるソースでgettextの設定をします。
- poディレクトリに移動し、intltool-update -pを実行。パッケージ名.potが作成されます。
- 作成された.potファイルを'言語.po'としてコピーします。
例えば、日本語ならja.poです。
$ cp パッケージ名.pot ja.po
- ja.poを編集
Project-Id-VersionからContent-Typeまでを編集します。
charsetは日本語の場合、EUC-JPです。
最後に、#, fuzzyの行を削除しておいて下さい。
- autogen.shがあればそれを実行します。無ければ他のソースパッケージを探せば見つかると思います。または、aclocal autoconf autoheader automakeを順に実行してください。
- 以上で国際化完了です。あとは普通にconfigure&&makeして下さい。
- ソースが変更されたら、poディレクトリで、make update-poを実行して下さい。
ja.poなどが更新されます。
この時、新しい未翻訳のメッセージが追加されていれば、適宜編集して下さい。
- ソースを追加したら、poディレクトリのPOTFILES.inにファイルパスを追加して下さい。
- あとはこの繰り返しです。