2010年10月21日木曜日

_(アンダーライン) = 国際化する文字列を指定する(Gawk専用) - AWK

AWKの国際化対応
○Gawk on Windows ○Gawk ×mawk32 ×Mawk ×awk
AWKプログラムの国際化対応は、国際化したい文字列の前に「_」(アンダーライン)を入れる事から始まります。
o 国際化対応は、Gawk専用の機能です。


**** 書式
--------
_"国際化したい文字列"
--------

o 国際化したい文字列 -- 日本語や英語など、環境によって置き換えたい文字列


**** 使用例
--------
BEGIN {
print _"Miku-san" " 393";
print _"Negi";
}
--------

o この例の場合、" 393" は国際化しません。
o ちなみに、葱に相当する英語は、英国の leek / 米国の green onion


**** 機能
o 国際化したい文字列を指定します。
   + 指定する文字列は、半角の英数記号が理想です。
   + 全角文字に指定すると、翻訳作業する時に全角文字が記号化するからです。
   + 具体例は、下のメモ欄をご覧ください。
o 翻訳ファイルを作って所定の位置に置くと、設定した言語に応じて文字列が切り替わります。
o 翻訳ファイルが無い時は、文字列がそのまま表示されます。
o この機能をサポートしていない処理系があります。
   + ですので、複数のAWK処理系で動かしたい時は、この機能を使う事は出来ません。


** 処理系に依存する動作
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6


**** メモ
o リソースファイルの置き場所を変更したりしたい時は、専用の関数を使います。

** おまけ。翻訳作業の流れ
o 翻訳前のAWKプログラム
--------
BEGIN {
print _"Miku-san";
print _"ミクさん";
}
--------

o 必要に応じて、bindtextdomain 関数などを呼び出します。
o 全角文字の "ミクさん" に指定すると、翻訳が大変です。理由は、下を見ると分かります。

o 「-W gen-po」オプションで生成する翻訳作業用ファイル
--------
#: test.awk:2
msgid "Miku-san"
msgstr ""

#: test.awk:3
msgid "\203~\203N\202\263\202\361"
msgstr ""
--------

o 全角文字の「ミクさん」が記号化しています。
o この作業用ファイルの、msgstr に翻訳後の文字列を入れていきます。
o 翻訳が終わったら msgfmt ツールを使って moファイル形式に変換し、所定の場所に配置します。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3 -- 非対応
o Mawk for Windows 1.3.3 -- 非対応
o original = the one true awk(updated May 1, 2007) -- 非対応


==
関連ページ:
    ▼AWKの国際化対応 i18n
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > ▼AWKのパターンと制御文