bluedwarfの日記: gettextによる国際化 5
日記 by
bluedwarf
というわけで、予告通りAnthyの単語登録/削除/編集を行うソフトウェアを作っているのですが、gettextによる国際化がうまくいきません。 Linux覚え書き - gettextによる国際化を参考にしてやってみたのですが、特にエラーも吐かず、しかし国際化がされません。アプリケーションを起動してもラベルに表示する文字列などが日本語で表示できなくて困ってます。
また、GUIの設計段階で、全然Anthyの辞書をいじる機能は実装していないので、このgettextizeが終わったらちゃっちゃとやろうと思ったのだけれど、いまいちgettextでの国際化の仕方が分からずに困っています。
別に国際化なんてしなくてもいいんだろうけど、今後のためにもやっておきたいし。
追記:
なんか、N_("")を_("")に修正したらできた。意味分からん。
文字列などが日本語で表示できない (スコア:0)
後者ならば、おそらく非UTF-8な文字列をGtk+2に通しているのが原因だと思われます。最近のgettextはlocaleに応じてカタログの文字コードを変換してくれますが、これが仇になるというパターンです。これを回避するにはbind_textdomain_codesetを使ってUTF-8に固定することです。
Re:文字列などが日本語で表示できない (スコア:1)
(他のプログラムをみて)bind_textdomain_codesetを使ってUTF-8に固定していますが、特に文字化けしているというわけではなく、単に翻訳されずに英語のまま表示されています。
# なぜだーーー
// Give me chocolates!
Re:文字列などが日本語で表示できない (スコア:0)
#define _(Text) gettext (Text)
#define N_(Text) Text
と定義されているので_()は翻訳されますがN_()は翻訳されません。じゃあ何でN_()があるかと言うと、元文字列はxgettext(1)に拾わせたいけど、すぐに翻訳せずにあとでgettext(3)に渡したいということがあるからです。
Re:文字列などが日本語で表示できない (スコア:1)
#define _(String) dgettext(PACKAGE,String)
#ifdef gettext_noop
# define N_(String) gettext_noop(String)
#else
# define N_(String) (String)
#endif
となっていますね。noopってなんだか分からないけれど、とにかく_()と書かなければいけないということですね。分かりました。
ありがとうございます。
// Give me chocolates!
Re:文字列などが日本語で表示できない (スコア:1)
多分、noopってのは"No Operation"の略です。「何もしない」の意。