flat7th

tips:デーモン起動・停止でI18Nなメッセージが出る件

created 2004-11-30 modified 2010-12-09 

問題

独自につくったデーモン用のinitスクリプトを作成し提供したい。
/etc/init.d/httpdなどを参考にして作る。
echo -n $"Starting $prog: "
などとしているところで、国際化されたメッセージが出ている。
これそのままマネして使って大丈夫かな?
そもそもこれってどうやってるの?

調査

TEXTDOMAIN=initscripts
#LC_MESSAGES=en_US
LANG=ja_JP.UTF-8

gettextの仕組みらしい。
どこかに、initscripts という名前と関連した国際化文字列を
格納しているところ(POファイル?)があるはず...。

man textdomain
うむ。あとでちゃんと読もう。

info gettext
をみると、個別のプログラミング言語のセクションがあって
bashのところに
gettext shorthand
  $"abc"
とある。
コマンド gettext の、コマンド名を省略した書き方として
扱われるのかな。
export TEXTDOMAIN=initscripts
として
echo $"Starting $prog: "
とすると
を起動中: 
が返り、
gettext 'Starting $prog: '
とやってみたら、
$progを起動中
が返ってきた。うむ。

関連する環境変数など

TEXTDOMAIN
TEXTDOMAINDIR
LANG
LC_MESSAGE

/usr/share/locale/ja/LC_MESSAGES/*.mo
initscripts.mo

GPLになる?

gettextでググってみたら
http://www.linux.or.jp/JF/JFdocs/ABOUT-NLS-7.html
むむむ
あなたが自由に利用できるプログラムを書いていて、それを国際化したいと
思っているなら、あなたのパッケージで GNU `gettext' を使うことを歓迎
します。もちろん、その配布物に `gettext' のディレクトリを含めるなら、
その時からあなたのソースには GNU Public License が適用されます。
しかし、いずれにせよあなたはフリーソフトウェアを書いているので、
これは制限にはなりません。
あれー、GPLに汚染されるの?

あれかな。initスクリプトだけ別パッケージにすればGPLの範囲を限定できる。だけど、ドキュメントなんかでそのinitスクリプトがあることを前提とした書き方をしてしまうとぎりぎりアウトかな。そうすると、わざわざ「開始します」程度の国際化文字列のためにgettext使うのはばかばかしい。

いや、ちがうか。利用するだけならLGPLだから問題ないのかな。gettext自体を改造したものを配布するなら問題だけど、gettextをユーザが使えるようにするだけだし。

「gettext のディレクトリを含める」が何を意味するのか、今度詳しく調べよう。