Linux覚え書き - gettextによる国際化

目次

既にいくつかの有用なページがありますが、
gettextやautoconfなどもバージョンが上がってきているので メモしときます。

gettextによる国際化

gettextとは

gettextとは、一つの実行ファイルでメニューなどに使われる言語を切り替えることができる仕組みです。

準備

あらかじめソース一式がautoconf,automake化されていることを前提とします。
今回試した環境は、RedHat Linux 9です。

手順

  1. 'gettextize -c --intl'を実行
  2. Makefile.am中のSUBDIRSに、m4 po intlがなければ追加します。
  3. main関数があるディレクトリのMakefile.amに以下の行を追加します。
    AM_CPPFLAGS=-DLOCALEDIR='"$(localedir)"'
    
  4. 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 がなければ追加。
  5. poディレクトリのMakevars.templateをMakevarsとしてコピーまたはリネームして下さい。
    $ cp po/Makevars.template po/Makevars
    
  6. poディレクトリにPOTFILES.inを作成します。
    以下のコマンドで自動作成できるでしょう。
    $ find src | grep -e ".*\.c$" -e ".*\.h$" > po/POTFILES.in
    
  7. 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__ */
    
  8. 国際化したいソースを編集します。
    やることは4つあります。
    グローバル変数でなければ、直接
    printf(_("hoge\n"));
    としても大丈夫ですが、あまりよろしくないようです。
  9. main関数のあるソースでgettextの設定をします。
  10. poディレクトリに移動し、intltool-update -pを実行。パッケージ名.potが作成されます。
  11. 作成された.potファイルを'言語.po'としてコピーします。
    例えば、日本語ならja.poです。
    $ cp パッケージ名.pot ja.po
    
  12. ja.poを編集
    Project-Id-VersionからContent-Typeまでを編集します。
    charsetは日本語の場合、EUC-JPです。
    最後に、#, fuzzyの行を削除しておいて下さい。
  13. autogen.shがあればそれを実行します。無ければ他のソースパッケージを探せば見つかると思います。または、aclocal autoconf autoheader automakeを順に実行してください。
  14. 以上で国際化完了です。あとは普通にconfigure&&makeして下さい。
  15. ソースが変更されたら、poディレクトリで、make update-poを実行して下さい。 ja.poなどが更新されます。
    この時、新しい未翻訳のメッセージが追加されていれば、適宜編集して下さい。
  16. ソースを追加したら、poディレクトリのPOTFILES.inにファイルパスを追加して下さい。
  17. あとはこの繰り返しです。

参考ページ

gettext -- Larse
http://larse-gtk.hp.infoseek.co.jp/gettext.html
gettext による日本語対応について
http://www.on.cs.keio.ac.jp/~yasu/jp_localedata.html
gettextメモ
http://home.catv.ne.jp/pp/ginoue/memo/gettext.html
My Linux 日本語化計画
http://www.on.cs.keio.ac.jp/~yasu/jp_localedata.html
GNOME アプリケーションメッセージの日本語化
http://penguin.gnome.gr.jp/~tahara/howto/translation.html

SoftInfo / Software / Tips / BBS  /  i-mode / imodeBBS / TOP
最終更新
Tuesday, 06-Jul-2004 22:47:19 JST
公開日
2003/10/02
Copyright©てきとーぺえじ webmaster@teki.jpn.ph All rights reserved.