4.文字列リソースと浮気


多分ここまでの知識と後いくつか補足を加えれば大抵のアプリケーションの日本語化は大丈夫だと思います。今の勢いで残りのダイアロ グのリソースを自分で変更してみて下さい。これ以上のダイアログ上での同じ様な説明は退屈なだけだと思いますのでこの辺でやめてお きます。尚、Dialogの20001だけは弄らないで下さい。理由と説明は後程行います。

アプリケーションを作る場合、例えばエラー出力や定型文字列、ボタンのテキストなど、よく使う文字列を一括管理する為にリソース内 に組み込んで、リソース番号で指定できるようにすることがあります。単純なテキストデータベースを作ると言った方がよいでしょうか。
この文字列リソースを利用することでアプリケーション作成側はバージョンアップの手間を軽減することができますし、各言語用の文字 列を用意すればある程度簡単に多言語対応させることができます。更に高度な例としてはボタンやダイアログのタイトルを全部空にして おいて、実行する時に初めて文字列リソースから文字を取り出して描画することもあります。

また愚にもつかない例え話で恐縮ですが、あなたはもの凄く浮気性な男だったとします(女性の方は適時男を女と読み替えて下さい。ホモ の方は業界のツインズの呼び方で・・・)。ところが奥さん(亭主)や、交際中の相手が隣の餅でも焼いて煮て食ってしまおうかという位の焼き 餅焼きだと仮定します。こんな状態ではあなたは満足に浮気ライフを楽しめません。スナックのホステス(バイト先の優しい店長さん)をや っと口説き落として(口説き落とされて)私用の携帯の電話番号をゲットしても、まさか自分の携帯に登録なんてできません。こと浮気に関 しては、される側もニュータイプかと見まがう程の洞察力を発揮します。多分女性名を男性名に変えて登録してある位では、ひょんなこと で携帯の登録を盗み見された相手の追求から逃れることはまずできません。
さて困りました。やっぱり何かの記録手段を使って情報(電話番号)を保存し、それを隠蔽しなければなりません。交際は最初の段取りが一 番大事だからです。「携帯の番号忘れちゃった。エヘヘ」なんてヘタは打てません。まぁ色々やり方はあるでしょうが、ここでは次のような 方法を採用します。

1.自室にある漫画や小説の適当なページに自分だけがわかる暗号で書き込んでおく。
2.電話番号を保存しておく漫画の本の背表紙に容易に判別できるラベルを貼っておく。

これで後で電話番号が知りたい時にいつでも見直すことができます。「相手にわからないようにもう一個携帯持ったらいいじゃん」とか 「手帳にでも書いておいて適当な隠し場所に隠しておきゃいいじゃん」みたいな野暮は言いっこなしですよ?わかりましたか?
昔若かりし頃に部屋にエロ本を隠す時にカバーを参考書とかに変えておいたことがある方がいらっしゃるかもしれませんが、それと同じ ような物です。
注意点としては女性(子供さんがいれば子供も)が興味を持ちそうなタイトルは避けることです。「名探偵コナン」とか朝日ソノラマ文庫 に隠蔽するのはお勧めできません。読んでいて眠たくなるような小説や、読めば間違いなく気が滅入るような作品を選ぶことが肝心です。
ふくしま政美「聖(セント)マッスル」「女犯坊」「ゴルゴ13」「さいとう・たかを劇画座招待席」等の一連のさいとう・たか を作品。はたまた小島功「ひげとボイン」谷岡ヤスジの作品や加藤締三PHP文庫等・・・まぁ、入手するのに苦労しそうなタイトルも ありますが、その辺の作品を選んでおけば女性はまず手にとって読もうとは思いません。女性の場合だと同人系のホモ漫画だったら男は 読まないと思います。というか、同人ホモ漫画を読んでいたらあなたとの交際(結婚)は偽装だと疑ってかかった方がよいかと・・・
こうした処置をしておけば、本棚の本の中からラベルの付いた本を取り出し、中に記載されている文章で容易に隠蔽していた情報を得る ことが可能になります。えらい手間になりますが。

もの凄く長い前置きになりましたが、このラベルに対応した文章が文字列リソースだと思って下さい。無茶苦茶な例えですけど・・・
まずラベルを探して本を取り出し、その中から特定の文章を取り出す。アプリケーションも同じで、リソースの中から特定のラベルを 見つけ、その中から特定の文字列を取り出します。要はここも日本語化しなければ中途半端になると言うことですね。

では文字列リソースを日本語化していきましょう。まずString Table→1→1033をクリックして下さい。例によってこれもリソース言語を 日本語にしておきます。


STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
1, "ScreenHunter Message"
4, "Specified capture folder is not valid."
5, "Cannot automatically name file."
6, "Specified capture file name is not valid."
7, "Cannot open Clipboard."
8, "Cannot set Clipboard data."
10, "Cannot create timer to set initial delay."
}

上のような文字列が出てきたはずです。今まで挫折せずついてきた人は""の間に文字列がありますから、「なんか文字列を指定しているらしいな」と言うこと に気付くはずです。これが文字列リソースというわけです。先頭の1,4,5・・・と言った番号が所謂ラベルです。String Tableの1の1と指定 すれば「ScreenHunter Message」と言う文字列が取り出せるという寸法です。いつもと同じように""の間の英語を日本語に翻訳します。
こんな感じになりました。翻訳は適当です。

STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
1, "ScreenHunter メッセージ"
4, "指定されたキャプチャフォルダは無効です"
5, "ファイル名の自動生成に失敗しました"
6, "指定されたキャプチャファイル名は無効です"
7, "クリップボードを開けません"
8, "クリップボードにデータを設定できません"
10, "遅延の初期化設定でタイマを作成できません"
}


上の英文・翻訳文を見たらわかるかもしれませんが、どうやらこの文字列リソースはエラーメッセージのようです。多分エラーがおこると 出現するメッセージダイアログに上で設定した文字列が表示されるのでしょう。通常上のようなエラーメッセージはあまりお目にかかるこ とがないかもしれませんが、でしたら訳しておきましょう。

5.検索を活用して再びダイアログの日本語化

お待たせしました。この辺でDialog→20001の日本語化を開始します。
とりあえずDialog→20001→1033を開いて、痔持ちのオヤジの番号に変えてやります。そしてしばし眺めて下さい

見たところトレイアイコンの上で右クリックして出てくるメニューから「&About ScreenHunter 4.0 Free」(上の日本語化したものだと 「ScreenHunter 4.0 Freeについて(&A)」)を選択するか、設定画面でHelpボタンを押した時に出てくるダイアログボックスのようです。実際に見比べてみましょう

このように、リソース上のインターフェース実行時のインターフェースを見比べてみることは非常に大事なことです。明るい居酒屋でオネェ ちゃんをナンパするのは問題ないですけど、薄暗いクラブとかでのナンパは注意が必要です。実際に日の光の元で細部まで露わになったそ の顔を見た途端、卒倒しそうになることもままありますから。また、最近のSFX技術(と言うかメイク)は進歩していますので、化粧する 前と後では鬼のように違う場合があります。JAROに訴えてやる」と息巻いても駄目です。家に帰ってからベッドの上で自分のしでかし た行為を思ってくぐもった声で呻くことしかできません。「ヴヴヴヴヴヴ・・・」

実際の画面と見比べてみると、リソース上できちんとラベル指定しているのはボタンの文字と、二つのメモエリアの上のラベルエディット だけのようです。ウィンドウのタイトルすらありません。何故こういうことをしているかというと、上でも述べたとおりアプリケーショ ン開発作業を簡素化する為です。例えばバージョンアップした時などは、「このソフトについて」とかのアバウトダイアログボックスの バージョン表記をいちいち変更するのは面倒なものです。そこで文字列リソースを使って一元管理するようにしているのです。ですから ここで手を付けるのは上で見たインターフェースだけでいいということです。ここまで来たらこれくらい朝飯前ですね。こんな感じです。

「それじゃダイアログ上に出てくる文字列は何処にあるんだ?」
こう思うのが当然ですよね。それを今から探していきます。いちいち文字列リソースを見ていけばいいだけの話ですが、今回は検索を やってみます。とりあえずウィンドウのタイトルを探すことにしましょう。先ほど見たアバウトダイアログのタイトルは「About ScreenHunter...」 でした。ResourceHackerのメニューの表示→検索をクリックして検索ウィンドウを表示します。そしてそのエディットボックスに先ほど のタイトルを入力します。こんな感じ。

次に「次を検索」ボタンを押して検索を実行します。するとString Table→7→1033のここがヒットしました。

念の為他にもないか「次を検索」をメニューから選んで検索してみましょう。

こういうダイアログが出てきてこれ以上同じ文字列は存在しない ことがわかります。つまりここの文字列リソースを使用してアバウトダイアログのタイトルを表示しているということですね。一番上の「&About ...」 というのと下の「Wisdom-soft ScreenHunter 4.0 Free」はよく判りませんが、ここもとりあえず日本語に直しておきましょう。

STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
101, "について(&A) ..."
104, "ScreenHunterについて..."
105, "Wisdom-soft ScreenHunter 4.0 Free"
}

こういった感じですね。ひょっとしたら連続したリソースで文字列を設定しているかもしれませんのでString Table→7のすぐ下の String Table→19→1033を開いてみます。

STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
{
301, "ScreenHunter 4.0 Free"
302, "Copyright c 2000 - 2002 Wisdom Software Inc."
}

ビンゴですね。でもここは英語のままで別に問題ありませんので次のString Table→20→1033を開きます。

STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
{
305, "All rights reserved."
307, "http://www.wisdom-soft.com/"
308, "Click to upgrade to the advanced ScreenHunter 4.0 Pro!"
309, "http://www.wisdom-soft.com/customer_care/order.htm"
310, "ScreenHunter 4.0 Free is a completely free screen capture tool for you to easily take screenshots.\n\nScreenHunter can capture a rectangle area, an active window and full screen. It automatically saves captures in BMP, JPEG or GIF file format, so you don't have to stop each time and you can capture as many as you like. It also can save to Clipboard to be copied to other programs, such as Motion Studio and Word.\n\nScreenHunter has selectable hotkey capture (F1 to F12 and Print Screen), delayed capture, and uses virtually no system resources on standby.\n\nScreenHunter 4.0 Free has no expiry date and can be copied and distributed without permission and free of charge. However, the free version is only supported for the registered users of ScreenHunter 4.0 Plus or ScreenHunter 4.0 Pro. Upgrade to ScreenHunter 4.0 Plus, ScreenHunter 4.0 Pro and buy licenses online to become a registered user.\n\nPlease tell all your friends and colleagues about ScreenHunter! So they can also have a chance to get it.\n"
314, "JPEG File (*.jpg)"
315, "Bitmap (*.bmp)"
316, "GIF File (*.gif)"
317, "ScreenHunter"
318, "Cannot register the hotkey.\n\nThis hotkey may have been taken by another program or,\nScreenHunter may have run already, check your system tray.\n\nPlease change the hotkey and try again."
}

ここでも実際表示されるアバウトダイアログで見た文字列がいくつかあります。いつものように適当に翻訳していきましょう。
305「All rights reserved.」そのままで問題ありませんね。次になんかURLがあります。これはなんでしょうか?
そういえばアバウトダイアログにwww.wisdom-soft.comというボタンがありました。ひょっとしたらここでそのボタンを押した時に移動する ページのURLを指定しているのかもしれません。試しにここをウチのページのURL(http://www.dukedog.flnet.org/)にしてみます。
変更したらコンパイルしてファイルメニューから「保存する」を選択して一旦ResourceHunterを終了させ、アプリケーションを実際に 起動して試してみます。
どうでしたか?
www.wisdom-soft.comボタンを押すとウチのページが開きましたよね? このリソースにURLを指定しているのも、後でHPのURLが変わった 時に修正しやすくする為です。ここにURLのある理由が判明しましたので、http://www.wisdom-soft.com/に戻しておきましょう。
次に308です。これは実際の画面に表示されていますので普通に翻訳して終わり。309307と同じ様に、アップグレードボタンを押すと 開かれるURLです。ここも問題ないですね。
310はちょっと注意が必要です。この文字列はアバウトダイアログボックスの2つあるメモコントロールの内の上側のメモの中に表示さ れる文字列です。この文字列をつらっと見ていきますと、途中で「\n」という文字が何個かあると思います。C言語等でプログラムした ことのある方ならおわかりになるかと思いますが、これは「ここで改行しますよ」ということを表す記号です。「\n」ひとつで一回改行 します。当然のことながら2つで二回改行します。日本語化する時にこの「\n」を入れ忘れると改行無しのだらしがない文章になりますの でひとつここは気を引き締める為にも適当な位置で改行するように心がけましょう。いくら服装に気を配ってかっこつけてもチャックが フル全開ならマヌケに見えることと同じようなものです。
そういえば昔、初めてオニューの単車で学校に行った時、格好もバッチリ決めて、我ながら「かっこいいぜ、俺!」と思いつつ正門をくぐりました。なんだか女の子達や男ですら微笑を浮かべて僕の方を見つめています。誰もが振り向くんです。やっぱりライダーって素晴らしいな、と思いスムーズなライドに気を配りながら駐輪場に単車を止めました。古いですが、気分は「ヤヌスの鏡」(アヌスではありません)の風見慎吾です。そして降りようとした時、ズボンの社会の窓が全開になっていて、中からトランクスの切れ端が覗いていることに初めて気が付いたのです。

・・・死にたくなりました・・・

6.動作チェックと長瀬愛


・・・気分が乗った?ところで314に入ります。あれ?なんかアバウトダイアログボックスにはないのが紛れ込んでますね。314,315,316は画像形式 みたいです。察しのいい方ならすぐわかるかと思いますが、これはスクリーンショットの画像の保存形式で指定できる画像形式ですね。
そういえばそういうのを選択するコンボボックスがありました。これを見て下さい。

ここで選択できる画像形式が何故か紛れ込んでいるんです。あまり深く考えても頭の毛髪が抜け落ちますのでそのまま翻訳しましょう。
一応またコンパイル・保存してチェックしてみましょう。

興奮の瞬間?です。予想通りこのコンボボックスの文字列が日本語になりました。ヤレヤレです。
さて、317は翻訳する必要はありませんので次に318を見てみます。またアバウトダイアログにない文字列です。アバウトダイアログボックス で翻訳すべき最後のコントロールである2つ目のメモコントロールに出てくる文字列は一体何処にあるんでしょうか?あまり焦らされて カウパー液が出すぎますと、いざ本番という時に子供ができる可能性が高いんですよ!先走り液にも精子は入っているんです!!
おっと、また電波を発信してしまいました。ここは落ち着いて317を翻訳してみましょう。

ホットキーを登録することができませんでした。
このホットキーが別のプログラムによって使われているか、ScreenHunterが既に実行されている可能性があります。システムトレイをチェックして下さい。
ホットキーを変えて再度試行して下さい。

大体こんなことが書いてあります。どうもこれはエラーメッセージみたいですね。いちいちチェックするのもめんどくさいので改行位置 にだけ気を付けながら適当に翻訳して次に進みましょう。文字列リソースString Table→19は最終的にこんな感じになります。

STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
305, "All rights reserved."
307, "http://www.wisdom-soft.com/"
308, "ScreenHunter 4.0 Proにアップグレードするにはボタンをクリックして下さい!"
309, "http://www.wisdom-soft.com/customer_care/order.htm"
310, "ScreenHunter 4.0 Freeは簡単にスクリーンショットを撮ることができる、完全に無料のスクリーンキャプチャツールです。\n\nScreenHunterは長方形領域、アクティブウィンドウ、そして画面全体を捉えることができます。キャプチャ画像は自動的にBMP・JPEG・GIF形式で保存されます。従ってキャプチャの度に繁雑な作業抜きで連続でキャプチャ作業を続けることができます。また、キャプチャ画像をMotion StudioやWordで利用できるようにクリップボードに保存することもできます。\n\nScreenHunterはキャプチャ用のホットキー(F1からF12までとPrintScreenキー)を選択可能で、キャプチャ時間の遅延も可能、そして監視中にはシステムリソースを仮想的には全く使用しません。\n\nScreenHunter4.0 Freeは使用期限を持たず、使用許諾無しで無料でコピー・配布が可能です。しかしながら無料版はScreenHunter 4.0 PlusとScreenHunter 4.0 Proの二つの有償版のユーザーの為のサポートは一切ありません。登録ユーザーになるにはScreenHunter 4.0 PlusとScreenHunter 4.0 Proにアップグレードして、オンラインでライセンスを購入して下さい。\n\nScreenHunterのことを周りの友人や同僚の方に話して下さい!そうすることで彼らもこのソフトのユーザーとなるチャンスができるのです。\n"
314, "JPEG ファイル(*.jpg)"
315, "ビットマップ (*.bmp)"
316, "GIF ファイル (*.gif)"
317, "ScreenHunter"
318, "ホットキーを登録することができませんでした。\n\nこのホットキーが別のプログラムによって使われているか\nScreenHunterが既に実行されている可能性があります。システムトレイをチェックして下さい。\n\nホットキーを変えて再度試行して下さい。"
}

もうしんどくなってきましたが、2番目のメモコントロールの文字列に出会うまで旅を続けましょう。「母を訪ねて三千里」マルコの気分 ですね。かぁちゃんがいると思ったら実は引っ越した後だった、みたいな。
String Table→21→1033を開きます。ここも目的の文字列ではありません。面倒ですがここも一気に日本語化してしまいましょう。

STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
{
326, "Cannot create file.\n%s\n\nPlease check the location to see if it's write protected or disk is full."
}

と思いましたが、一つ目の「\n」(改行)の後ろに「%s」なる新たな記号があります。これは何なのでしょうか?
その前に326の意味を翻訳します。

ファイルを作成できませんでした。
ファイル位置をチェックして書き込みが保護されていないか、ディスクが容量が一杯でないかチェックして下さい。

大体こんなところです。これはキャプチャ画像を保存しようとした時にファイルが作成できなかった時に出るエラーメッセージのよう です。「%s」は何かというと、「ここに文字列が入りますよ」という意味です。例えば作成しようとしたファイルが「長瀬愛」で、 「ファイル%sを作成できませんでした。」と指定していると、「ファイル長瀬愛を作成できませんでした。」となるわけです。要するに 適当な位置にそのまま%sを指定しておけば問題ないと言うことです。最終的にはこんな感じ。

STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
326, "ファイルを作成できませんでした。\n%s\n\nファイル位置をチェックして書き込みが保護されていないか、ディスクが容量が一杯でないかチェックして下さい。"
}

ここでちょっと試してみましょう。コンパイル・保存してアプリケーションを起動させます。その後、適当な保存フォルダを作成します。
例えば「C:\Program Files\Wisdom-soft ScreenHunter\今日のおかず」というフォルダを作成します。次にScreenHunterを起動させ、保 存フォルダにこのフォルダを選択します。そしてファイル名を「固定」にして「長瀬愛」と入力します。

次に「Stand By」ボタンを押して 何でもいいですので画面をキャプチャします。するとキャプチャ画像が「今日のおかず」フォルダに「長瀬愛.jpg」として保存されますので そのファイルを右クリックして「プロパティ」を選択します

このようなダイアログが出てきたら上のように「読取り専用」の左のチェックボックスの四角をクリックしてチェック(印を付ける)し、OKボタンを押します。 これで書き込みを保護しましたので、もう一回何でもいいですのでキャプチャします。するとこんなダイアログが出てきます。

成功です!!ファイル長瀬愛は新規作成できません!!

ちゃんとできていますので全ての設定を元に戻して、次の文字列リソースを見てみることにしましょう。

マルコはまたおかぁさんと出会うことができませんでした。「次こそは!」の気持ちで次のString Table→22→1033を開きましょう。 お、こ・・・これはっ!!
生き別れになったおかぁさんと抱き合うかのような、感動の再会ではありませんか。待ちに待った文字列の登場です。

STRINGTABLE
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
{
343, "[Step 1]\nOn the 'From' tab, pick a hotkey you press to start capturing, F6 for instance, and what to capture.\nOn the 'To' tab, choose where you want the captured image copied or saved.\n\n[Step 2]\nClick the 'Stand By' button. The ScreenHunter icon appears in your Windows system tray.\n\n[Step 3]\nPress the hotkey you picked in Step 1 to actually capture, F6 in this case.\n\n[To Cancel]\nRight-click the mouse button to cancel.\n"
346, "Out of memory.\nThere may be too many applications, documents, or images open. Close any unnecessary ones, and then try again.\n"
347, "[File name] %s\n\n[In folder] %s \n\n[File size] %d bytes"
348, "[File name] %s\n\n[In folder] %s"
}

・・・と、いくら盛り上げてみても全然ですね・・・段々電波文章が酷くなってきているような気がします。
気を取り直してここを翻訳しましょう。343さえ翻訳すれば当初の目的は果たせますが、尻切れトンボもお尻の穴がむず痒くなる心持ち ですのでここは全部翻訳してしまいます。後戯も大事ですからね。とりあえず343346は改行にさえ気を付けていれば普通に翻訳できます。
気になるのは347「%d」という記号です。%ssというのは「String(文字列)」頭文字です。そうすると%dもなにかの頭文字かもしれない と想像できるかもしれません。実を言うと%dd「decimal(十進)」頭文字です。要は実行時に%dの記号を十進整数に置き換えますよ ということになります。[File size]という文字列の後にありますからバイト数が入るんでしょうね。そういうわけですからここは別に 翻訳しなくても何の問題もありませんね。最終的にはこうなります。

STRINGTABLE
LANGUAGE LANG_JAPANESE, 0x1
{
343, "[ステップ 1]\n「キャプチャ対象」タブでキャプチャを開始するホットキー(デフォルトではF6キー)を選択し、キャプチャ対象の種類を選択します。\n「保存先」タブでキャプチャ画像の保存形式を設定します。\n\n[ステップ 2]\n「Stand By」ボタンをクリックします。ScreenHunterのアイコンがあなたのシステムトレイに現われます。\n\n[ステップ 3]\nStep 1で選択したホットキー(デフォルトではF6)を押せば画像をキャプチャできます。\n\n[キャンセル]\nキャンセルするにはマウスボタンを右クリックします。\n"
346, "メモリ範囲エラー\n非常に多数のアプリケーション・ドキュメント・画像を開きすぎています。不要なものを全て閉じて、再試行して下さい。\n"
347, "[File name] %s\n\n[In folder] %s \n\n[File size] %d bytes"
348, "[File name] %s\n\n[In folder] %s"
}

実行するとこんな感じ


この後の文字列リソースはマウスカーソルが上に来た時に出現するポップアップヘルプの文字列等です。全て説明はできませんのでこれも 各自暇な時にでもコツコツと翻訳して下さい。そうして文字列リソースを翻訳すれば日本語化は完了したも同然です。少し数が多いです が、オシッコも我慢に我慢を重ねて放尿した方が満足感&快感もひとしおってもんです。是非とも頑張って頂きたい。

最後にひとつ難題が残っていますので、次回でその解説をしてこのチュートリアルは終わりになります。