Next: gettext.sh, Previous: sh, Up: sh [Contents][Index]
インターナショナリゼーションにむけたシェルの準備は、概念的にはSourcesで説明したステップと似ています。以下はシェルスクリプトのための具体的なステップです。
. gettext.sh
gettext.sh
は、関数eval_gettext
(eval_gettext Invocationを参照してください)と、eval_ngettext
(eval_ngettext Invocationを参照してください)を提供するシェルの関数ライブラリーです。gettext.sh
は、PATH
に記述された検索パスに配置されている必要があります。
TEXTDOMAIN
およびTEXTDOMAINDIR
を、setしてexportします。TEXTDOMAIN
は通常はパッケージ名かプログラム名、TEXTDOMAINDIR
は$prefix/share/locale
に対応する絶対パスです。ここで$prefix
はインストールした場所です。
TEXTDOMAIN=@PACKAGE@ export TEXTDOMAIN TEXTDOMAINDIR=@LOCALEDIR@ export TEXTDOMAINDIR
"`...`"
または"$(...)"
))や、デフォルト値が含まれる変数(例:${variable-default}
)、$0
,
$1
, ...のような引数参照、一時的なシェル変数(例:
$?
)を含めないようにします。こうすることにより、常に単純なlocalコードを再構築することができます。たとえば、
echo "Usage: $0 [OPTION] FILE..."
は以下のように書き換えます
program_name=$0 echo "Usage: $program_name [OPTION] FILE..."
同様に、
echo "Remaining files: `ls | wc -l`"
は以下のように書き換えます
filecount="`ls | wc -l`" echo "Remaining files: $filecount"
この変更を行う際には、シェル変数への参照の前にある$記号をエスケープするためのバックスラッシュを追加する必要もあります。そうすれば‘eval_gettext’関数が変数が置き換える前の、翻訳可能な文字列を受けとることができます。例えば以下のような文字列で考えてみましょう
echo "Remaining files: $filecount"
は以下のように書き換えます
eval_gettext "Remaining files: \$filecount"; echo
出力コマンドが‘echo’ではないときも、バッククォートにより‘echo’を使うことができます。バッククォートの内側では、バックスラッシュを2重に指定しなければ効果がないことに注意しなければなりません(これはバッククォートすることにより、バックスラッシュが1階層分消費されるからです)。例として、‘echo’がエラーをシグナルするシェル関数だとすると、
error "file not found: $filename"
は最初に以下へ変換され
error "`echo \"file not found: \$filename\"`"
となり、その後以下のようになります
error "`eval_gettext \"file not found: \\\$filename\"`"